如何从jQuery中的外部URL获取数据?

时间:2010-09-02 16:45:17

标签: jquery

var resturl = "http://example.com";
cj.getJSON(
    resturl + "&callback=?",        
    function(data)
    {
       console.log( data );
    }
);

永远不会调用我的回调函数。有什么想法吗?

4 个答案:

答案 0 :(得分:13)

这里有两件事:

首先,您的网址添加应为"?callback=?",因为没有其他查询字符串,或者使用jsonp数据类型的完整$.ajax()调用,因此会根据需要添加查询字符串,如下所示:

$.ajax({
  url: resturl,
  dataType: 'jsonp',
  success: function(data){
    console.log( data );
  }
});

其次,您要支持的域名JSONP

答案 1 :(得分:1)

请记住,jquery将作为函数执行回调,因此您必须确保服务器返回的JSON被包装为回调。

这是一个非常简单的工作示例。

<强>使用Javascript:

var myURL = "http://www.someserver.com/somegreatapplication.php?callback=?";
$.getJSON( myURL, function(data) { 
    $("#somediv").html( data.htmlCode);
});

<强> somegreatapplication.php

<?php

    $output['htmlCode'] = "<b>This worked!</b>";

    // Properly format the jsonP response //
    $json = json_encode( $output);
    header("Content-type: application/json");  
    exit( $_GET['callback'] . ' (' . $json . ');' );
?>

请注意,PHP不会像您可能习惯的那样返回Raw JSON代码,但实际上会返回回调函数,包括JSON。 jQuery会将您的URL变成以下内容:

<强> http://www.someserver.com/somegreatapplication.php?callback=jsonp1283446768493&_=1283446768526

然后你的PHP输出:

jsonp1283446768493({"menuHTML":"<b>This worked!</b>"});

运行,然后该对象在getJSON(... function(){})中可用;

所有这一切当然都假定您正在控制通信的两端。如果你不这样做,那么你需要确保另一端给你正确的JSONP输出(你可能需要使用一个特别命名的回调,如果他们强制这样做)

答案 2 :(得分:0)

只要服务器端发送数据并使用JSONP

,这就应该有效
var resturl = "http://example.com";
$.getJSON(resturl,{"callback":"?"},function(data, textStatus){ console.log(data)});

答案 3 :(得分:0)

根据文档,回调仅在成功时执行。因此,一般的请求可能会失败。构造的URL实际上也不包含有效的查询字符串。您使用?启动查询字符串,但您的网址只包含&,表示其他查询字符串参数:

  

callback(data,textStatus)请求成功时执行的回调函数。

http://api.jquery.com/jQuery.getJSON/

但我不确定额外的JSONP选项是否会改变此政策。