Ich versuche, einen ASP.net-Webdienst zu schreiben, der von einem jQuery AJAX-Aufruf verwandt wird. Ich bin absolut am Ende meines Verstandes versucht, dies zur Arbeit zu bringen. Ich habe eine Reihe ähnlicher Fragen online gesehen, aber ich konnte keine passende Lösung finden.Probleme mit ASP.net JSON Webservice-Antworttyp
Wenn ich versuche, den Ajax-Aufruf (über jquery) zu bekommen, bekomme ich eine erfolgreiche Antwort vom Server, aber die Anfrage scheitert wegen eines Parser-Fehlers.
Ich habe den vom Webservice zurückgegebenen JSON validiert und er ist gültig. Das Problem scheint von der Tatsache herrühren, dass asp.net das JSON-Objekt als XML zurückgibt.
ich den Rückgabetyp als json
<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
mit angegeben habe ich die folgende http-Handler hinzugefügt haben, da es als ein potenzielles fix
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/>
</httpHandlers>
Der Inhaltstyp wird erwähnt wurde eingestellt "application/json; charset = utf-8" und der dataType zu "json" in meinem jquery ajax setup. Der Anfragetyp scheint korrekt zu sein, aber die Antwort ist immer xml.
Ich kann die Anfrage erfolgreich machen, indem Sie den dataType entfernen, aber ich würde sehr gerne vermeiden, ein eval zu verwenden, um die Daten zu deserialisieren.
Wenn jemand einen Vorschlag hat, werde ich sehr geschätzt. Ich habe mir für ein paar Tage die Haare ausgezogen.
JAVASCRIPT
(function($) {
$.ajaxSetup({
type: "POST",
contentType: "application/json; charset=utf-8",
global: false,
dataType: "json"
});
function auto() { console.log("test"); return; };
$.fn.species = {
test: function() { alert("test"); },
load: function() { //load and attach species list to element as dropdown
$.ajax({
url: "SpeciesService.asmx/List",
success: function(msg) { console.log(msg); },
error: function (xhr, desc, exceptionobj) {
console.log(xhr.responseText);
console.log(desc);
console.log(exceptionobj);
}
});
return this;
}
}; //Species Block
}) (jQuery); // jQuery Alias-Block
ASP.NET Webservice
<%@ WebService Language="VB" Class="SpeciesService" %>
Imports System.Web Importe System.Web.Services Importe System.Web.Services.Protocols Importe Arten Importe System.Runtime.Serialization
'Um den Aufruf dieses Web-Service aus dem Skript mithilfe von ASP.NET AJAX zu ermöglichen, entfernen Sie die Kommentarzeichen für die folgende Zeile. '_
_ _ Public Class SpeciesService
Inherits System.Web.Services.WebService
<WebMethod()> _
<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
Public Function Data(ByVal id As Integer) As String
Dim curSpecies As New Species(id)
Return curSpecies.serialize
End Function
<WebMethod()> _
<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
Public Function List() As String
Return Species.list()
End Function
End Class
Ich glaube, dieses Problem ist in jQuery 1.4.x behoben. In jQuery 1.3.x benötigen Sie nur Daten: '{}'. * Alle * Daten zwingen jQuery, den Inhaltstyp festzulegen; legitime Schlüssel und Werte sind nicht notwendig. –