Я пытаюсь вызвать веб-сервис с веб-страницы ASP.NET, используя AJAX.Но он всегда вызывает мой обработчик ошибок, а не мой обработчик успеха.
Вот мой javascript:
function DeleteCurrency(currenciesId) {
$.ajax({
url: "Ajax/Currencies.asmx/GetCurrencyUsage",
data: "{ 'currencyId' : '" + currenciesId + "' }",
failure: function (msg) {
alert('Failure: ' + msg);
},
error: function (result, thrownError) {
alert('Error:');
},
success: function (results) {
alert('Success: ' + results);
}
});
}
Вот код в моем файле asmx:
/// <summary>
/// Summary description for Currencies
/// </summary>
[WebService(Namespace = "http://xxx.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
[System.ComponentModel.ToolboxItem(false)]
public class Currencies : System.Web.Services.WebService
{
[WebMethod]
public string[] GetCurrencyUsage(int currencyId) {
List<string> list = new List<string>();
list.Add(currencyId.ToString());
list.Add("This is item 1");
list.Add("This is item 2");
list.Add("This is item 3");
list.Add("This is item 4");
list.Add("This is item 5");
return list.ToArray();
}
}
По словам Фиддлера, вот что я отправляю:
{ 'currencyId' : 3 }
А вот что возвращает веб-служба:
{"d":["3","This is item 1","This is item 2","This is item 3","This is item 4","This is item 5"]}
Как уже упоминалось, мой обработчик ошибок вызывается.Но состояние аргумента результата показывает «ОК» и 200. Второй аргумент имеет тип parsererror
.
Все данные, кажется, там, так что где ошибка.Это как-то связано с "d": в результатах?Я не уверен, где искать дальше.
РЕДАКТИРОВАТЬ:
Дальнейшее тестирование показывает, что если я изменю свой веб-сервис, чтобы вернуть одну строку (а не массив), все работает, как и ожидалось.
Ясно, что мой веб-сервис вызывается правильно, он возвращает статус 200 (ОК) и также возвращает ожидаемые данные.Но есть некоторая ошибка при анализе результатов при наличии нескольких значений.Мне все еще интересно, имеет ли это какое-то отношение к букве "D", но я просто не уверен.