【问题标题】:jQuery getJSON to external PHP pagejQuery getJSON 到外部 PHP 页面
【发布时间】:2010-10-21 21:54:09
【问题描述】:

我一直在尝试向外部服务器发出 AJAX 请求。 到目前为止,我了解到出于安全原因我需要使用 getJSON 来执行此操作?

现在,我似乎无法简单地调用外部页面。 我试图尽可能地简化它,但它仍然无法正常工作。 我有 2 个文件,test.html 和 test.php

我的 test.html 像这样调用 localhost 进行测试:

    $.getJSON("http://localhost/OutVoice/services/test.php", function(json){
    alert("JSON Data: " + json);
});

我希望我的 test.php 返回一个简单的“测试”:

$results = "test";
echo json_encode($results);

我可能犯了一些令人难以置信的菜鸟错误,但我似乎无法弄清楚。 另外,如果这可行,我怎样才能将数据发送到我的 test.php 页面,就像你想 test.php?id=15 一样?


test.html 页面正在调用本地主机上的 test.php 页面,同一目录 我没有收到任何错误,只是没有警报..

【问题讨论】:

  • 发出请求的页面是什么。我想确保您没有跨域安全问题。
  • test.html 页面正在调用本地主机上的 test.php 页面,同一目录我没有收到任何错误,只是没有警报..
  • 可能需要指定content-type: header('Content-Type: application/json'); echo json_encode($results);

标签: php jquery ajax json getjson


【解决方案1】:

可能是你在 test.php 中没有回调。另外,json_encode 只接受一个数组:

$results = array("key" => "value");
echo $_GET['callback'] . '(' . json_encode($results) . ')';
// the callback stuff is only needed if you're requesting from different domains

当您使用http:// 时,jQuery 会自动切换到 JSONP(即使用脚本标签而不是 XMLHttpRequest)。如果您在同一个域上有 test.html 和 test.php,请尝试使用相对路径(并且不要回调)。

【讨论】:

  • +1。我也将在服务器端实现回调,但是如果我选择在同一个域中托管客户端和服务器,仍然使用回调会破坏它吗? (大概一个小时左右我就能回答我自己的问题了……)
  • 回调将始终有效,即使您从同一个域请求文件。事实证明,使用 JSON 回调比请求和评估对象更快(因为 eval 太慢了)。几个月前,Yahoo Flickr 团队写过这篇文章:code.flickr.com/blog/2009/03/18/…
  • 这完全打开了你对 XSS 的尊重 - metaltoad.com/blog/using-jsonp-safely
【解决方案2】:

小心moff的回答。它有一个常见的 XSS 漏洞:http://www.metaltoad.com/blog/using-jsonp-safely

【讨论】:

    【解决方案3】:

    最简单的解决方案是将以下代码添加到您的 test.php 文件的任何输出之前,然后您可以更灵活地使用您使用的方法,标准 ajax 调用应该可以工作。

    header ('Access-Control-Allow-Origin: *');
    

    但是,当您从您无法控制的服务器获取数据时,请使用 json 回调。

    【讨论】:

    • +1,但您确实应该将其限制在您请求的服务器上。另外,IE 对此的支持比较滞后,所以如果您需要浏览器支持,最好使用 JSONP 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多