У меня есть запрос ajax, который вызывает WebService
. Это работает и делает свое дело, и ничего не возвращает вообще (это пустота). Нет ошибок в приложении при отладке. Но событие ошибки для jquery .ajax продолжает срабатывать. textStatus и errorThrown не определены. В XMLHttpRequest отсутствует индикация состояния ошибки.
Почему этот запрос думает, что получает ответ об ошибке?
Также странно: если я поставлю точки останова в WebMethod, ошибка будет выдана клиенту ДО завершения метода. Кажется, он не ждет его завершения, он просто переходит к событию ошибки. Я ожидаю, что это как-то связано с проблемой здесь ...
$.ajax({
url: baseUrl() + "/webservices/usersetting.asmx/SetSetting",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
data: $.toJSON(ajaxData),
success: function (data) {
alert('success');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Error: " + errorThrown + " data: " + ajaxData.id);
}
});
При отладке в случае ошибки:
XMLHttpRequest
abort: function (){w&&Function.prototype.call.call(g,w);L("abort")}
onabort: null
onerror: null
onload: null
onloadstart: null
onprogress: null
onreadystatechange: function (){}
readyState: 4
response: ""
responseText: ""
responseType: ""
responseXML: null
status: 0
statusText: ""
upload: XMLHttpRequestUpload
withCredentials: false
__proto__: XMLHttpRequest
Вот метод. Я попробовал это с пустым возвратом, и "верно". Пробовал отвечать форматом Xml и Json. Без разницы.
[WebMethod(EnableSession = true),
ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public string SetSetting(List<UserSettingData> data)
{
UserSettingManager setMgr = new UserSettingManager(Global.UserSession.UserID);
foreach (UserSettingData item in data)
{
setMgr.SetSetting(item.name, item.value);
}
return (jsonString(true));
}