Json请求到另一个域

时间:2013-11-27 13:50:06

标签: php jquery json

我试图用json和php从一个服务器向另一个服务器发出请求。

我的html页面:

$.ajax({
            type: "POST",
            url: "https://api.domain.com/gateway/partners/create_account.ajax.php",
            dataType: 'jsonp',
            crossDomain: true,
            data: { "name" : "Test name"},
            success: function(data)
            {
                console.log(data.responseText);
            }
          });

我的php看起来像这样:

$name = $_GET['name'];
$data = array("Hello", $name);

echo json_encode($data);

我想在我的控制台上收到:Hello测试名称

我做错了什么?

2 个答案:

答案 0 :(得分:3)

你是:

  1. 告诉jQuery以JSONP
  2. 处理响应
  3. 编写将输出JSON(而不是JSONP)的PHP ...可能是text/html内容类型。
  4. 尝试发出POST请求而不是GET请求。 JSONP仅支持GET。
  5. 尝试将请求返回的数据视为XHR对象。
  6. JSONP响应的最小示例是:

    <?php
    header("Content-Type: application/javascript");
    $name = $_GET['name'];
    $data = array("Hello", $name);
    
    echo $_GET['callback'];
    echo "(";
    echo json_encode($data);
    echo ");";
    

    然后你需要改变JS,以便type: "POST"变为type: "GET"console.log(data.responseText);变为console.log(data);

    或者,您可以使用another technique to bypass the same origin policy并仍然使用POST。

答案 1 :(得分:0)

jsonp是一种古老的做法,也是一种不安全的做法,因为任何人都可以调用你的脚本。当jsonp调用失败时,To是非常默认的检索错误。

您可以在请求中实现CORS标头,然后只需使用简单的XHR调用。

加入标题:

Access-Control-Allow-Origin: *

将解决您的问题,但最好使用确切的域而不是通配符。