Невозможно получить доступ к стороне клиента Webservice с помощью Jquery JSON - PullRequest
0 голосов
/ 22 июля 2011

Я не могу получить доступ к веб-сервису через jquery и не могу найти проблему, я проверил все, но, похоже, ничего не работает.

Вот мой код JavaScript:

function obtenerMunicipios() {
    $.ajax({
        type: "POST",
        url: "WebService.asmx/ObtenerMunicipios",
        data: { sEstado: "info" },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) { alert(response.d); },
        error: function (response) { alert("Error"); }
    });
}

Это вызывается при изменении DropDownList, я проверил WebMethod внутри веб-службы, и он работает нормально, кстати, он возвращает ArrayList, я уже поместил [ScriptService] и [WebMethod] соответственно. Это всегда говорит мне, что есть ошибка.

Visual Studio помещает файл кода в App_Code, но файл asmx в корень. Я не знаю, является ли это проблемой, но я так не думаю, потому что могу получить доступ к стороне сервера webmethod.

В результате всегда отображается предупреждение об ошибке, и если я ставлю точку останова в WebMethod, она никогда не появляется, поэтому я думаю, что это проблема с URL.

Что я могу сделать?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Попробуйте проверить на наличие ошибки возврата, замените "error:" на

error:function (xhr, ajaxOptions, thrownError){
                    alert(xhr.responseText);
                    alert(xhr.status);
                    alert(thrownError);
                }

, и вы можете увидеть гораздо больше в инструментах Firebug или Fiddler или IE9 Developer

Также вы можетесоздайте webmetod на своей странице, на стороне сервера, примерно так:

public partial class _Default : Page 
{
  [WebMethod]
  public static string GetDate()
  {
    return DateTime.Now.ToString();
  }
}

На клиенте измените это

url: "PageName.aspx/GetDate"

Посмотрите на страницу Дейва, например: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

0 голосов
/ 22 июля 2011

Если вы еще этого не сделали, проверьте, что отправляется обратно через Fiddler.Я предполагаю, что он отправляет обратно то, что ему нравится

Вам необходимо указать, что ваш запрос будет принимать, используя событие beforeSend .

function obtenerMunicipios() 
{ 
     $.ajax({ 
              type: "POST", 
              url: "WebService.asmx/ObtenerMunicipios", 
              data: { sEstado: "info" }, 
              contentType: "application/json; charset=utf-8", dataType: "json",
              success: function (response) { alert(response.d); }, 
              error: function (response) { alert("Error"); },
              //This is the line you're looking for I think.
              beforeSend: function(xhr, settings) { xhr.setRequestHeader("Accept",
                                                              "application/json"); } 
         }); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...