ASP.NET der webservice antwortet mit Internen Server-Fehler (500) an post und get Anfragen
Den webservice code ist einfach:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void receiveOrder(string json) {
Context.Response.Write("ok");
}
Und das jquery-Aufruf der webservice ist wie folgt:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: 'http://localhost:50730/GingerWeb.asmx/receiveOrder',
data: 'test', //JSON.stringify(webOrder),
dataType: "text",
success: function(data){
if(data === "ok")
orderPlaced();
}
});
Und noch die chrome-Konsole liest im provokativen rot:
500 (Internal Server Error)
- Sollte nicht dein Datentyp sein "json"?
- Ich fand es heraus. Für zukünftige Forscher, die eingebaute Seite, die angezeigt wird, wenn Sie nur rufen Sie die asmx-Seite zeigt an, dass der webservice erfordert eine speziell formatierte xml-text, der mit (in diesem Fall) json als eines der Elemente.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass ASMX-web-service benötigen, zu finden alle input-Parameter in der Anfrage. Wenn mindestens ein input-parameter, die nicht in der Anfrage an den server der web-Dienst ist fehlgeschlagen mit den Statuscode 500 (Internal Server Error).
Der Grund dafür ist, dass Sie senden die Daten in die falsche Richtung. Der name des input-Parameters der web-Methode ist
json
(siehevoid receiveOrder(string json)
). Also diedata
Möglichkeit, die$.ajax
sollte in der formwenn Sie
type: "POST"
stattdata: JSON.stringify(webOrder)
denen Sie zuvor versucht. In dem Fall, In den Körper der POST Anfragejson=theVlue
statt nurtheValue
.Wenn Sie verwenden würde
type: "GET"
formatdata
parameter sollten geändert werden, umDen Wert der
dataType
sollte 'json'. Nach den änderungen, die die$.ajax
funktionieren sollte.Außerdem würde ich dir empfehlen die Verwendung relativer Pfade im
url
option. Ich meine zu verwenden'/GingerWeb.asmx/receiveOrder'
statt'http://localhost:50730/GingerWeb.asmx/receiveOrder'
. Es spart Ihnen aus same-origin-policy Fehler.Hallo Oleg: Deine Erklärung ist einfach und auf den Punkt. Ich hatte ein ähnliches problem, die Ihre Erklärung gelöst. Ich bin die Bereitstellung von code-snippet zu helfen, 'Suchenden' zu verstehen, was ich konfrontiert war, und wie die oben genannten geholfen zu lösen. Kurz gesagt: ich bin die Erteilung einer einfachen jquery (.ajax) aus einer aspx-Seite. Habe ich einen webservice, der bekommt einige Daten aus backend (cache/db) und zurück das gleiche im json-format.
JS-CODE:
ASP.NET Code-Behind für die Web-Service
Es ist ABSOLUT notwendig, um sicherzustellen, dass Sie übereinstimmen, 'pageName' variable angegebenen Namen in web-service-code, mit dem, was gesendet wird in Ihrem data-parameter der ajax-Anfrage. Ich hatte Sie anders und verändert es das gleiche zu sein, nach langen Stunden habe ich endlich die richtige Lösung gefunden, vielen Dank für diesen post. Auch, in meinem Fall bin ich nur vorbei an einer einzigen "name:Wert" - paar, also ich habe noch nicht zu verwenden, einige json-De-Serialisierung-Funktion, um den Wert, Seitenname oben gibt mir nur den Wert.