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

时间:2009-04-08 12:40:19

标签: asp.net javascript jquery web-services

我之前有一个问题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})“

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

5 个答案:

答案 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);}
        });