如何使用jquery“jsonp”调用外部Web服务?

我有一个先前的问题可以jquery ajax调用外部webservice?

一些优秀的开发人员回答我使用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 " ; } 

任何人都有例子或可以为我解释这个问题?

更新
我再次编写代码是这样的:

 $.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})”

并且从不调用成功函数,任何人都可以帮忙吗?

我有一个类似的问题,不幸的是我没有手头的代码。

从记忆里:

  • 将[ScriptService]作为属性添加到Web方法中
  • 同时更改您的url以调用HelloWorld过程。
    类似于http:// localhost:1096 / MySite / WebService.asmx / HelloWorld?回调

请参阅: 使用JSONP与.net交谈的JQuery的一些很好的例子是什么? 使用jquery调用.net webservice的最佳方法是什么?

JSONP的观点是P! P如填充。 您正在使用函数调用填充JSON对象文字 – 在调用页面上调用函数,将数据对象作为参数。

即如果您请求Web服务,请在查询字符串中发送所需的回调函数名称

 ...service/?callback=hello 

然后服务应该回答(使用适当的mime类型):

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

有关更深入的说明,请参阅: http : //www.stpe.se/2008/10/cross-site-data-retrieval-using-jsonp/

您不能使用JSONP发出POST请求,只能发出GET(因为获取资源)。

Hezil的代码对我有用,但我不得不将服务器代码更改为:

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

注意“回调”而不是“jsoncallback”。

首先,您应该在Web服务器中添加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);} });