Почему вызов моего ASP.NET WebMethod вызывает мой обработчик ошибок? - PullRequest
1 голос
/ 16 ноября 2011

Я пытаюсь вызвать веб-сервис с веб-страницы 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", но я просто не уверен.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

Попробуйте добавить:

contentType: "application/json; charset=utf-8" ,
dataType: "json",
type: "POST",

К вашему запросу Ajax

В вашем обработчике успеха, позвоните:

alert('Success: ' + results.d.length);

Он должен предупредить 5

Кроме того, я раньше не видел этот обработчик «сбоя».Я бы закомментировал это сейчас на всякий случай ... Я думаю, что обработчика "ошибки" должно быть достаточно.

1 голос
/ 17 ноября 2011

ПОСТАНОВИЛИ

Я наконец-то смог исправить эту проблему. Кажется, это было сочетание того факта, что мы использовали старую версию jQuery (1.2.6), и способа ее настройки. В частности, у нас была строка dataType: "json" в $.ajaxSetup().

По причинам, которые я до сих пор не до конца понимаю, удаление этой строки привело к тому, что код начал работать должным образом.

Спасибо за все комментарии. Думаю, было бы трудно решить эту проблему с помощью предоставленной мною информации.

1 голос
/ 17 ноября 2011

Вот то, что я использую для вызова моей службы asmx. Ваш другой код выглядит хорошо.

 <script type="text/javascript">  
   function testAsmx() {  
    $.ajax({  
       type: "POST",  
       url: "http://localhost/ASMXtoWCF/test.asmx/HelloWorld",  
       dataType: "json",  
       data: '{"variable":"testme"}',  
        contentType: "application/json; charset=utf-8",  
        success: function (msg) {  
          alert(msg.d);  
        },  
        error: function (msg) {  
          alert("I am a failure");  
        }  
      });  
    }  
</script>
...