Вызывание функции веб-сервиса ASP.NET через ПОЛУЧАЕТ метод с jQuery

Я пытаюсь вызвать функцию веб-сервиса через, ПОЛУЧАЮТ метод с помощью 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>

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

6
задан the_V 26 April 2010 в 19:47
поделиться

6 ответов

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

0
ответ дан 16 December 2019 в 21:36
поделиться

Не забудьте добавить это в свои параметры 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
ответ дан 16 December 2019 в 21:36
поделиться

Вам необходимо украсить метод атрибутом 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
ответ дан 16 December 2019 в 21:36
поделиться

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

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string Test2()
{
   [...]
}
8
ответ дан 16 December 2019 в 21:36
поделиться
  1. Правило для json: Вы можете получить доступ к данным только из того же домена !

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

0
ответ дан 16 December 2019 в 21:36
поделиться

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

0
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: