Нет ответа на SO помог мне решить эту проблему.Вместо этого я нашел 2 статьи, описывающие эту проблему.
jQuery не кодирует данные запроса в JSON, а в строку запроса.Это приводит к тому, что ASP.NET игнорирует заголовок Accept
и отвечает XML.
Проверьте эту статью на заголовок "JSON, объекты и строки: oh my!".
Здесь я цитирую:
$.ajax({
type: "POST",
url: "WebService.asmx/WebMethodName",
<strong>data: {'fname':'dave', 'lname':'ward'},</strong>
contentType: "application/json; charset=utf-8",
dataType: "json"
});
Поскольку этот параметр данных является допустимым литералом объекта, вызов веб-службы таким способом не вызовет ошибок JavaScript нана стороне клиента.К сожалению, желаемого результата тоже не будет.
fname=dave&lname=ward
Это явно не то, что мы хотим, чтобы произошло.Решение состоит в том, чтобы убедиться, что вы передаете jQuery строку для параметра данных, например:
$.ajax({
type: "POST",
url: "WebService.asmx/WebMethodName",
<strong>data: "{'fname':'dave', 'lname':'ward'}",</strong>
contentType: "application/json; charset=utf-8",
dataType: "json"
});
Это небольшое изменение в синтаксисе, но оно имеет все значение.Теперь jQuery оставит наш объект JSON в одиночку и передаст всю строку в ASP.NET для анализа на стороне сервера.
В моем случае параметр данных - это большой объект, поэтому я использую нечто подобноечтобы сериализовать его в JSON вручную.
data: JSON.stringify({'fname':'dave', 'lname':'ward'}),
Получение ASP.NET ScriptService для возврата JSON при запросах из jQuery очень сложно, и многие параметры в вашем коде могут заставить его генерировать XML вместо JSON.Вы должны прочитать различные SO Q / A, чтобы получить удовлетворение.
Связанная статья от того же автора , которая может дать больше рекомендаций.