2012-05-09 11 views
5

Ich habe einen WCF-Dienst, der einen POST erwartet. Mit Fiddler entdeckte ich, dass meine POST-Anfrage in domänenübergreifenden Situationen zu einem GET geändert wurde, was zu einem Fehler 405 vom Server führte.JQuery ajax JSONP POST geändert zu GET, wenn Domäne

$.ajax({ 
    type: "POST", 
    url: "http://blah/blah.svc/Test", 
    data: JSON.stringify("{ 'WebUserID': 4 }"), 
    dataType: "jsonp", // from server 
    contentType: "application/json; charset=utf-8", // to server 
    success: function (data, status, xhr) { 
     alert("success--"); 
    } 
}); 

Kann jemand etwas Licht darauf werfen?

Dank

+1

Dies ist nicht wirklich ein Duplikat, aber die Antwort beantwortet diese Frage: http://stackoverflow.com/questions/2699277/post-data-to-jsonp – lonesomeday

Antwort

0

Es ist es konvertieren, weil Sie die JSON.stringify nachdem ich ein Name/Wert-Paar haben nicht mehr zu bekommen, Sie haben nur eine Zeichenfolge. POST erfordert ein Name/Wert-Paar.

+0

Do not 'JSON.stringify' Ihre Daten, es sei denn Sie bedeutet, eine serielle Darstellung eines Objekts zu übergeben. –

+0

Er sollte nicht stringifizieren, aber nicht wegen dem, was Sie erwähnt haben. Der Parameter zum 'stringify' ist bereits" stringifiziert ", es ist kein JS-Objekt (es ist ein String). Beim Stringifizieren wird es doppelt codiert, was fehlschlägt. – carlosfigueira

+0

Und um die Daten in einer POST-Anfrage zu senden, muss er tatsächlich eine serialisierte Version des Objekts (im Anfragetext) übergeben. – carlosfigueira

10

Es gibt keinen POST und JSONP. JSONP erstellt ein neues Skript-Tag im DOM, das eine GET-Anfrage an den Server sendet. Sie geben jQuery.ajax zwei inkompatible Parameter (POST, jsonp), und jQuery wählt eines aus.

Ein Update: Sie können etwas wie CORS (Cross-Origin Resource Sharing) verwenden, um Nicht-GET-Anforderungen an domänenübergreifende Dienste zu aktivieren. WCF unterstützt es nicht out-of-the-box, aber ich schrieb einen Beitrag über die Implementierung in WCF um http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx.

+0

Downvoter, interessieren Sie warum? – carlosfigueira