Где я ошибаюсь при вызове веб-методов ASMX из jquery?

StackOverflow https://stackoverflow.com/questions/608006

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть простой веб-метод в приложении asp.net 2.0 (с использованием расширений 1.0, а не расширений ajax 3.5).Я пытаюсь вызвать метод из jQuery, и когда я делаю это, как показывают бесчисленные примеры в Интернете и здесь, на SO, я получаю сообщение о внутренней ошибке сервера.

Вот мой текущий код:

[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string Select(string login)
{
    UserProfile profile = UserProfile.GetUserProfile(login);

    return "{ FirstName: '" + profile.FirstName + "', " +
             "LastName: '" + profile.LastName + "', " +
             "EmailAddress: '" + profile.EmailAddress + "', " +
             "PhoneNumber: '" + profile.PhoneNumber + "' }";
 }

И теперь jquery:

$.ajax({
    type: "POST",
    url: "Services/ProfileService.asmx/Select",
    dataType: "json",
    data: "{'login':'DOMAIN%5CUSER1'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ alert(msg); },
    error: function(xhr){ alert(xhr.statusText);}     
});

Веб-сервис украшен [ScriptService] атрибут тоже.Если я закомментирую тип контента, изменю тип данных на текст и изменю данные на строку запроса (имя = значение), я получу соответствующий XML-код.

Где я ошибаюсь?

ОБНОВЛЯТЬ:Я использую jQuery v1.3.1 и тестирую как в IE6, так и в Firefox 3.Я получаю стабильные результаты.

Это было полезно?

Решение

Это была глупая ошибка с моей стороны.Проблема решена.Хотя я включил ссылку на расширения AJAX, я забыл переписать httphandler для служб ASMX в класс ScriptHandlerFactory.

Добавление этого решило проблему.

Поскольку я получил несколько писем с вопросами о примерах или о том, как я решил проблему, я написал сообщение в блоге о том, как приготовить этот суп с орехами.

http://randomactsofcoding.blogspot.com/2009/03/jquery-json-and-asmx-20-services.html

Другие советы

Да.Вам следует отказаться от ASMX в пользу WCF.Рекомендация от самой Microsoft.Я думаю, это не поможет вам в вашей проблеме, но вам стоит рассмотреть WCF или хотя бы начать изучать эту технологию.

У меня была та же проблема, но она была исправлена, когда я добавил следующее в файл кода:

[System.Web.Script.Services.ScriptService]

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top