【问题标题】:PHP, jQuery Ajax and json return over a cross domainPHP、jQuery Ajax 和 json 跨域返回
【发布时间】:2012-04-05 01:53:12
【问题描述】:

我在一台返回 json 结果的服务器上有我的 php 编码页面。 php文件名为:getInfoData.php,返回如下。

  echo json_encode($v);

不,我可以使用 $.getJSON(??) 读取 json 并在同一服务器上运行它,但我需要 php 页面与调用它的 js 页面位于不同的服务器上。

但是当我这样做时,我得到了跨域问题。

所以我更改了代码以使用以下(jsonp):

  $.ajax({
    url: 'FILE_LOCATION_ON_ANOTHER_SERVER',
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    success: function() { console.log("Success"); },
    error: function() {console.log('Failed!'); }
});

但我没有看到任何东西,我只是通过控制台得到以下信息:

  http://www.THEURL.com/FOLDER/FILENAME.php?callback=jQuery171013088115444406867_1332256223342&_=1332256223343

还有一条消息说失败了!。

我做错了什么,如果可以解决这个问题,我该如何解决?

谢谢

【问题讨论】:

    标签: php jquery jsonp


    【解决方案1】:

    我经常使用这个,但也许有更好的方法

    <?php header('content-type: application/javascript; charset=utf-8');
    
    $data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
    
    echo htmlspecialchars($_GET['callback']) . '('.json_encode($data).')';
    

    因为我看到你提供了一个回调参数,所以一切都应该没问题

    【讨论】:

    • JSONP 实际上不是 JSON,它是被添加到脚本标签的 JavaScript 文件。您应该改用application/javascript MIME。
    • @Rocket 谢谢你的建议 :)
    【解决方案2】:

    JSONP 实际上并不是 JSON。这有点“黑客”。 JSONP 实际上是一个 JavaScript 文件,可以下载并运行。

    在您的 PHP 页面中,您应该被传递一个 callback 参数。您需要在其中“包装”您的 JSON。它应该是这样的:

    func({json: data})
    

    所以,你的 PHP 应该是这样的:

    echo $_GET['callback'] . '(' . json_encode($v) . ')';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2011-03-05
      • 2015-03-23
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2011-03-31
      相关资源
      最近更新 更多