我之前有一个问题can jquery ajax call external 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})“
并且永远不会调用成功函数,任何人都可以帮忙吗?
答案 0 :(得分:2)
我遇到了类似的问题,遗憾的是我手边没有代码。
来自记忆:
请参阅:What are some good examples of JQuery using JSONP talking to .net?& What is the best way to call a .net webservice using jquery?
答案 1 :(得分:2)
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/
答案 2 :(得分:0)
您不能使用JSONP发出POST请求,只能发出GET(因为<script src="...">
获取资源)。
答案 3 :(得分:0)
Hezil的代码对我有用,但我必须将服务器代码更改为:
$data = '{"name" : "hello world"}'; echo $_GET['callback'] . '(' . $data . ');';
注意“回调”而不是“jsoncallback”。
答案 4 :(得分:-1)
首先你应该在你的网络服务器中添加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);}
});