2017-10-28 5 views
0

Ich arbeite an einer Webapplikation, ASP.Net MVC 4.0 mit entityframework 6.0, versuche die Datenbank nach Benutzerauswahl zu aktualisieren. Daten werden mithilfe von jQuery AJAX an die Aktion des Controllers gesendet. Unten ist C# -Code angegeben, um eine Entität zu aktualisieren, die wiederum die Datenbank aktualisiert.jQuery AJAX führt immer einen Fehler aus: {}

Und hier ist jQuery AJAX Aufruf für diese Controller-Aktionsmethode.

function updateProduct() { 
     var productData = { 
      ProductName: $('#prodName').val().trim(), 
      ProductNumber: $('#prodNum').val().trim(), 
      CategoryName: $('#ctgryName :selected').text(), 
      ModelName: $('#mdlName :selected').text(), 
      ProductID: atob($('#editProductId').val()) 
     }; 
     debugger; 
     $('#divLoader').show(); 
     $.ajax({ 
      url: '@Url.Action("modidyProduct", "Home")', 
      data: JSON.stringify(productData), 
      type: 'POST', 
      dataType: 'json', 
      contentType: 'application/json;charset=utf-8', 
      success: function (jqXHR) { 
       //Below line will destroy DataTable - tblProducts. So that we could bind table again. next line - loadData(); 
       $('#tblProducts').DataTable().destroy(); 
       $('#divLoader').hide(); 
       loadData(); 
       $('#addModal').modal('hide'); 
       $('#editProductId').val(''); 
      }, 
      error: function (msg) { 
       debugger; 
       $('#editProductId').val(''); 
       $('#divLoader').hide(); 
       alert(msg); 
       alert("What's going wrong ?"); 
       //alert(jqXHR.responseText); 
      } 
     }); 
    } 

Nach jQuery AJAX-Methode & Aktion Controller ausgeführt wird, aktualisiert erfolgreich den Datensatz in der Datenbank. Antwortstatuscode - 200 & Status - OK wird zurückgegeben. Aber nur Fehler: {}, Code-Block wird jedes Mal in AJAX-Methode ausgeführt. Debugging screen capture with status-OK; statuscode - 200

Antwort

1

Dieser Teil Ihres $.ajax Methodenaufruf

dataType: 'json', 

Es erzählt jQuery, dass ist der Ajax-Aufruf Code eine gültige JSON-Antwort zurück erwartet, aber zur Zeit Ihres Rückgabetyp der Server-Methode ist void. Das bedeutet, dass es nicht etwas zurück und die $.ajax Methode versucht, die Antwort zu analysieren (vorausgesetzt, es ist ein gültiger JSON ist) und somit immer die typische „ParserError“

Wenn der Datentyp ist json und die Antwort wird vom Server empfangen, die Daten werden streng analysiert; Jegliche fehlerhafte JSON wird zurückgewiesen und ein Parse-Fehler wird ausgelöst. Ab jQuery 1.9 wird eine leere Antwort ebenfalls abgelehnt.

Die Lösung besteht darin, einfach die Eigenschaft dataType im Aufruf zu entfernen.

$.ajax({ 
     url: '@Url.Action("modidyProduct", "Home")', 
     data: JSON.stringify(productData), 
     type: 'POST', 
     contentType: 'application/json;charset=utf-8' 
    }).done(function() { 
     console.log('Success'); 
    }) 
    .fail(function(e, s, t) { 
     console.log('Failed'); 
    }); 

Oder können Sie Ihren Server Aktionsmethode aktualisieren Sie eine JSON-Antwort zurück.

[HttpPost] 
public ActionResult ModidyProduct(Productdetail prodData) 
{ 
    try 
    { 
     //to do : Save 
    } 
    catch (Exception ex) 
    { 
     //to do : Log the exception 
     return Json(new { status = "error", message=ex.Message }); 
    } 
    return Json(new { status="success"}); 
} 

Jetzt in Ihrem Client-Seite Code, können Sie die Json Antwort auf überprüfen, ob die Transaktion

$.ajax({ 
     url: '@Url.Action("ModidyProduct", "Home")', 
     data: JSON.stringify(productData), 
     type: 'POST', 
     contentType: 'application/json;charset=utf-8', 
     dataType: 'json', 
}).done(function (res) { 
    if (res.status === 'success') { 
     alert('success'); 
    } else { 
     alert(res.message); 
    } 
     console.log('Success'); 
}).fail(function(e, s, t) { 
     console.log('Failed'); 
}); 

Sie müssen nicht unbedingt erfolgreich war die dataType Eigenschaftswert angeben. Wenn nichts angegeben ist, versucht jQuery, basierend auf dem MIME-Typ der Antwort, die zurückkommt, davon zu schließen, dass in diesem Fall der Inhaltstyp der Antwort application/json; charset=utf-8 lautet. Du solltest also gut sein.

+0

Vielen Dank @Shyju, für Ihre Antwort. Diese detaillierte Erklärung ist sehr hilfreich für Neulinge wie mich. Aus deinem Kommentar habe ich abgeleitet, dass - contentType: 'application/json; charset = utf-8' verwendet, um den Server zu informieren, dass er Parameter in Form von 'json' als Anfrage erhalten würde. Und dataType: 'json' bereitet den Browser vor, um 'json'-Daten als Antwort zu parsen. @Shyju - Kommentar, wenn ich das richtig zusammengefasst habe. –

+0

Ja. Der Server verwendet den Inhalt Type header und jquery verwendet dataType, um die Antwort zu verarbeiten – Shyju

Verwandte Themen