Как вызвать внешний веб-сервис, используя jquery "jsonp"? - PullRequest
2 голосов
/ 08 апреля 2009

У меня был предыдущий вопрос может ли jquery ajax вызвать внешний веб-сервис?


и некоторые хорошие разработчики ответили мне, чтобы я использовал jsonp, но я не знаю, как его использовать, я пытаюсь позвонить в мой сервис, используя этот код:

$.ajax({
            type: "POST",
            url: "http://localhost:1096/MySite/WebService.asmx?callback=?",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "jsonp",
            success: function(msg) {alert(msg);}
            });


и это мой сервисный код:

[WebMethod]
public string HelloWorld() {
    return "Hello World " ;
}

1011 *
*

Кто-нибудь есть примеры или может объяснить эту проблему для меня?

UPDATE :
Я снова написал код, чтобы он был таким:

$.getJSON("http://localhost:1096/YourShoppingTest1/WebService.asmx/HelloWorld?jsonp=?",{name:"test"},
    function(data){
    alert(data.x);
    });


и сервис, подобный этому:

[WebMethod]
public string HelloWorld(string name)
{
    return "( {\"x\":10 , \"y\":100} )";
}


Но это всегда дает мне эту ошибку, когда возвращается: "отсутствует; до утверждения [Перерыв на этой ошибке] ({"x": 10, "y": 100}) "

и никогда не вызывать функцию успеха, кто-нибудь может помочь с этим?

Ответы [ 5 ]

2 голосов
/ 13 ноября 2009

Точка с JSONP - это P! P как в дополнение. Вы дополняете литерал объекта JSON вызовом функции - вызывая функцию на вызывающей странице, принимая объект данных в качестве аргумента.

т.е. если вы запрашиваете веб-сервис, отправьте имя нужной функции обратного вызова в строке запроса

...service/?callback=hello

Тогда служба должна ответить (используя соответствующий тип пантомимы):

hello({a: 17, b: 4117});

Более подробное объяснение см .: http://www.stpe.se/2008/10/cross-site-data-retrieval-using-jsonp/

2 голосов
/ 08 апреля 2009

У меня была похожая проблема, к сожалению, у меня нет кода под рукой.

Из памяти:

См .: Какие примеры JQuery, использующие JSONP для общения с .net? & Каков наилучший способ вызова веб-службы .net с использованием jquery?

0 голосов
/ 13 ноября 2009

Код Hezil работал для меня, но мне пришлось изменить код сервера следующим образом:

$data = '{"name" : "hello world"}'; echo $_GET['callback'] . '(' . $data . ');';

Обратите внимание на «обратный вызов» вместо «jsoncallback».

0 голосов
/ 12 мая 2009

Сначала вы должны добавить jsonp ('callback') на ваш веб-сервер, например, $ _GET ['callback']

Во-вторых, не забывайте ';' после вывода скриптов

$data = '{"name" : "hello world"}';
echo $_GET['jsoncallback'] . '(' . $data . ');';

Теперь вы можете узнать, почему возникла проблема «отсутствует; перед утверждением».

HTML:

$.getJSON({"http://localhost:1096/MySite/WebService.asmx?callback=?",
        function(data){alert(data);}
        });
0 голосов
/ 08 апреля 2009

Вы не можете отправить POST-запрос, используя JSONP, только GET (потому что <script src="..."> GETs ресурс).

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