Невозможно вызвать веб-метод с помощью jquery json

Я использую протокол jsonp для вызова веб-методов.

Я использую этот код для веб-сервиса:

public class Service1 : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
}

И это в JQuery с Джейсоном на стороне клиента:

        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: 'http://localhost:50837/Service1.asmx/HelloWorld',
            data: {},
            dataType: "json",

            success: function(Msg) {
                alert('success:' + Msg.d.FirstName);

            },
            error: function(xhr, textStatus, errorThrown) {
                alert("error");
            }

        });

    }

Этот JQuery всегда выдает сообщение об ошибке, но я не знаю причины. Кто-нибудь может мне помочь?


person Roger G    schedule 09.09.2010    source источник
comment
Измените alert("error") на alert(textStatus + " - " + errorThrown) для начала :)   -  person Nick Craver    schedule 09.09.2010
comment
Почему вы используете URL-адрес типа localhost: 50837 / Service1.asmx / HelloWorld, а не как '/Service1.asmx/HelloWorld'? Если веб-сервис на другом веб-сайте и ваша программа JavaScript? Где вы используете jsonp в своем текущем коде?   -  person Oleg    schedule 09.09.2010
comment
У меня есть 2 проекта: один с WS, а другой со страницей asp. Мне нужно вызвать WS следующим образом: «localhost: 50837 / Service1.asmx / HelloWorld», потому что, если я поставлю url: '/Service1.asmx/HelloWorld', дайте мне: ошибка не найдена 404   -  person Roger G    schedule 09.09.2010
comment
the errorThrown дает мне undefined ... я не знаю почему   -  person Roger G    schedule 09.09.2010
comment
Вам следует разместить веб-сервис как часть сайта. Если вы этого не сделаете, ваш код не будет работать из-за проблемы с одинаковой политикой происхождения (см. en.wikipedia. org / wiki / Same_origin_policy). Вы можете разместить на одном сайте несколько приложений ASP.NET MVC, веб-службу ASPX и службу WCF, и все они могут очень хорошо работать вместе. Это единственный способ обойтись без более сложного JSONP. В вашей ситуации JSONP слишком велик.   -  person Oleg    schedule 09.09.2010


Ответы (1)


Вам следует разместить веб-службу как часть сайта. Если вы этого не сделаете, ваш код не будет работать из-за проблемы с той же политикой происхождения (см. ).

Вы можете разместить на одном сайте множество приложений, разработанных с использованием различных технологий, таких как ASP.NET MVC, веб-служба ASMX и служба WCF, и все они могут очень хорошо работать вместе. Это единственный способ обойтись без более сложного JSONP. В вашей ситуации JSONP слишком велик.

Ваш вопрос почти такой же, как и Вызов простой веб-службы (файл .asmx) из AJAX и JQuery с использованием JSON - ошибка синтаксического анализа. Если вам нужен рабочий пример Hello Wold, вы найдете URL-адрес полного примера кода.

Вы можете узнать больше о различных способах решения одной и той же политики происхождения в разделе Вопрос о выполнении запросов XHR. Прочитав это, вы поймете, что проблема Same Origin Policy действительно сложна. Вы можете решить эту проблему, но в вашем случае ее на самом деле нет, нужно просто разместить все на одном веб-сайте и использовать относительные пути.

person Oleg    schedule 09.09.2010
comment
ок, ты прав. Чтобы решить свою проблему, я вызываю функцию на стороне сервера и вызываю WS. Спасибо за помощь. - person Roger G; 10.09.2010