Я пытаюсь написать веб-службу ASP.net, которая будет использоваться вызовом jQuery AJAX. Я абсолютно в своем уме, пытаясь заставить это работать. Я видел ряд похожих вопросов в Интернете, но я не смог найти решение, которое подходит.Проблемы с ASP.net JSON Тип ответа Webservice
Когда я пытаюсь сделать вызов ajax (через jquery), я получаю успешный ответ с сервера, но запрос терпит неудачу из-за ошибки парсера.
Я проверил json, возвращенный веб-сервисом, и он действителен. Проблема, похоже, связана с тем, что asp.net возвращает объект json как xml.
Я определил тип возвращаемого JSON с помощью
<Script.Services.ScriptMethod(responseFormat:=Script.Services.ResponseFormat.Json)> _
я добавил следующий обработчик HTTP, как это было упомянуто в качестве возможного исправления
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/>
</httpHandlers>
Тип содержимого устанавливается в «application/json; charset = utf-8», а dataType - «json» в моей настройке jQuery ajax. Тип запроса кажется правильным, но ответ всегда xml.
Я могу сделать запрос успешно, удалив dataType, но я очень хотел бы избежать использования eval для десериализации данных.
Если у кого-то есть предложения, я буду очень благодарен. Я несколько раз тянул свои волосы на несколько дней.
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 псевдоним Блок
ASP.NET WebService
<%@ WebService Language="VB" Class="SpeciesService" %>
Импорт System.Web Импорт System.Web.Services Импорт System.Web.Services.Protocols Импорт Виды Импорт System.Runtime.Serialization
'Чтобы позволить этой веб-службе вызываться из сценария, используя ASP.NET AJAX, раскомментируйте следующую строку. '_
_ _ 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
Я считаю, что эта проблема исправлена в jQuery 1.4.x. В jQuery 1.3.x все, что вам нужно, это данные: '{}'. * Любые * данные заставят jQuery установить тип содержимого; законные ключи и значения не нужны. –