2012-06-13 9 views
9

Dies ist eine MVC3-App. Ich habe folgende JavaScript-Aufruf meiner Aktion:JQuery AJAX-Aufruf an MVC-Aktion gibt immer einen Fehler zurück, wenn es keinen gibt

function editDescription(docId,fileName, fileDescription) { 
    $.ajax({ 
     type: "POST", 
     url: "/OrderDetail/LoadModelData", 
     contentType: "application/json; charset=utf-8", 
     data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}", 
     dataType: "json", 
     success: function (result) { 
     alert("ok: "+ result.d); 
     }, 
     error: function (result) { 
      alert('Oh no: '+ result.responseText); 
     } 
    }); 

Heres meine Aktion:

[HttpPost] 
    public string LoadModelData(string id, string filename, string description) 
    { 
     return filename; 
    } 

ich den Code ausführen, wird die Aktion mit den Parametern aufgerufen wird, nichts ist null, aber die Fehlerfunktion bekommt jedes Mal aufgerufen. So erscheint die Alarmbox mit 'Oh nein' jedes Mal, aber die von der Aktion zurückgegebene Zeichenfolge ist korrekt. Wenn der Dateiname ist test.pdf der Fehler Warnmeldung sagt

'Oh No: test.pdf'. 

sah ich in Firebug und es gibt keine Fehler. Warum wird die Erfolgsfunktion nicht aufgerufen, obwohl keine Fehler aufgetreten sind?

+0

Der Dateiname. Das macht, was es soll. Die Fehlerfunktion wird immer aufgerufen und früher oder später wird ein tatsächlicher Fehler auftreten – BoundForGlory

Antwort

11

Sie erwarten (Rückgabe) einen string Wert von Ihrer Aktionsmethode. Warum müssen Sie den Datentyp als json dann angeben? Entferne das und schau was passiert. Und es gibt keine d Eigenschaft aus der Antwort! also benutze einfach result in der alert.

$.ajax({ 
     type: "POST", 
     url: "/OrderDetail/LoadModelData", 
     contentType:"application/json; charset=utf-8",   
     data: JSON.stringify({ 
          id: docId, 
          filename: fileName, 
          description: fileDescription 
          }), 
     success: function (result) { 
     alert("ok: "+ result); 
     }, 
     error: function (result) { 
      alert('Oh no: '+ result.responseText); 
     } 
    }); 

die datatype Eigenschaft teilt den Server, auf welche Art von Inhalt ist der Kunde zurück, wie das Ergebnis zu erwarten.

EDIT: Wie Darin erwähnt, verwenden Sie bitte die JSON.stringify Methode, um die JSON-Anfrage zu erstellen. Aktualisieren dieser Antwort, um den richtigen Weg für zukünftige Besucher zu finden.

+0

das war es ... vielen Dank – BoundForGlory

+0

@ user1202717: Sie sind herzlich willkommen. Froh, dass ich helfen konnte. :) – Shyju

+1

-1 zum Verlassen der fest codierten JSON-Zeichenfolge in der Ajax-Anfrage. –

8

Nie JSON bauen mit String-Manipulationen:

data: "{'id': '"+docId +"', 'filename': '"+fileName+"', 'description': '"+fileDescription+"'}", 

Das ist absolut schrecklich und falsch. Du kodierst nichts. Genügend ein Zitat in der description und alles wird sich brechen. Immer einen JSON-Parser verwenden, wenn JSON Manipulation

So:

$.ajax({ 
    type: "POST", 
    url: "/OrderDetail/LoadModelData", 
    contentType: "application/json; charset=utf-8", 
    data: JSON.stringify({ 
     id: docId, 
     filename: fileName, 
     description: fileDescription 
    }), 
    success: function (result) { 
     alert("ok: "+ result.filename); 
    }, 
    error: function (result) { 
     alert('Oh no: '+ result.responseText); 
    } 
}); 

Die JSON.stringify Methode wird nativ integriert in modernen Browsern. Wenn Sie ältere Browser unterstützen müssen, können Sie das json2.js Skript

einschließen Ein weiterer Fehler ist Ihre Controller-Aktion Signatur. In ASP.NET müssen MVC-Controller-Aktionen ActionResults und keine Zeichenfolgen zurückgeben:

+0

Was ist mit JsonResult zurückgegeben? – PositiveGuy

+0

@CoffeeAddict, was ist damit? –

Verwandte Themen