Вызов функции веб-службы ASP.NET через метод GET с помощью jQuery - PullRequest
6 голосов
/ 26 апреля 2010

Я пытаюсь вызвать функцию веб-сервиса через метод GET, используя jQuery, но возникла проблема. Это код веб-службы:

[WebService(Namespace = "http://something.com/samples")]
[ScriptService]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class TestWebService  : System.Web.Services.WebService {
    [WebMethod]
    public string Test2()
    {
        string result = null;

    try
        {
            result = "{'result':'success', 'datetime':'" + DateTime.Now.ToString() + "'";
        }
        catch (Exception ex)
        {
            result = "Something wrong happened";
        }

        return result;
    }

}

Вот как я называю функцию:

$.ajax({ type: "GET",
         url: "http://localhost/testwebsite/TestWebService.asmx/Test2",
         data: "{}",
         contentType: "application/json",
         dataType: "json",
         error: function (xhr, status, error) {
             alert(xhr.responseText);
         },
         success: function (msg) {
             alert('Call was successful!');
         }
     });

Метод вызывается успешно, но результирующая строка покрывается тегами XML, например:

<string>
{'result':'success', 'datetime':'4/26/2010 12:11:18 PM'
</string>

И я получаю ошибку из-за этого (вызывается обработчик ошибок). Кто-нибудь знает, что можно сделать по этому поводу?

Ответы [ 7 ]

8 голосов
/ 27 апреля 2010

Включение веб-службы ASP.NET ASMX для запросов HTTP POST / GET

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string Test2()
{
   [...]
}
0 голосов
/ 18 августа 2010
  1. Вы можете использовать обработчик http вместо веб-сервис.
  2. Вы можете проанализировать xml ответ с помощью JavaScript на клиенте.
0 голосов
/ 12 мая 2010

Вы пробовали WebInvokeAttribute, у него есть члены, которые определяют форматы запросов и ответов, в которых вы можете установить WebMessageFormat.Json.
Что-то вроде:
[WebInvoke(UriTemplate = "ServiceName", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")]

0 голосов
/ 27 апреля 2010

Вам необходимо украсить метод с помощью ScriptMethodAttribute :

[WebService(Namespace = "http://something.com/samples")]
[ScriptService]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class TestWebService  : System.Web.Services.WebService {

  [WebMethod]
  [ScriptMethod]
  public string Test2()
  {
    [...]
  }
}

Это гарантирует, что метод возвращает JSON по умолчанию (значение по умолчанию ResponseFormat равно Json).

0 голосов
/ 26 апреля 2010

Вы можете попробовать установить ResponseFormat в ваших методах. Смотрите http://williamsportwebdeveloper.com/cgi/wp/?p=494, чтобы увидеть, как они сделали это для JSON. Вероятно, по умолчанию это XML.

0 голосов
/ 26 апреля 2010

Убедитесь, что добавили это к вашим параметрам ajax:

contentType: "application/json; charset=utf-8"

Ваш общий запрос должен выглядеть следующим образом, чтобы вернуть json вместо XML:

$.ajax({ type: "GET",
     url: "http://localhost/testwebsite/TestWebService.asmx/Test2",
     data: "{}",
     contentType: "application/json",
     dataType: "json",
     contentType: "application/json; charset=utf-8".
     error: function (xhr, status, error) {
         alert(xhr.responseText);
     },
     success: function (msg) {
         alert('Call was successful!');
     }
 });

У ScottGu есть полное описание того, что требуется здесь , но в вашем случае это выглядит как отсутствующий contentType (этот тоже меня немного смутил).

0 голосов
/ 26 апреля 2010
  1. Правило для JSON: Вы можете получить доступ только к данным из того же домена !

  2. Единственное исключение - использование jsonp (что довольно сложно реализовать, поскольку в .NET Framework нет сериализатора jsonp).
    Если вы используете стандартную веб-службу не WCF ), вы можете найти руководство по реализации здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...