将JSONP从PHP站点发送到多个站点

时间:2012-06-05 10:56:39

标签: jquery json jsonp

我是JSONP的新手,所以我希望有人能从头开始帮助我。

基本上我的情况是:

我有一台带CMS的服务器。我希望来自CMS的信息出现在其他几个网站上。

所以我想(但我不确定)我把我要传输的信息放在一个PHP变量中。然后我用

echo json_encode($json);

然后在网站上我希望显示关于我使用JQuery的信息:

$.ajax({
  url: 'http://www.mycmssite.com/phppage.php?json',
  dataType: 'json',
  data: json,
  success: callback
});

var myvar = success;
document.write(myvar);

现在这是我的初步理解,我知道它充满了漏洞。但如果有人能够指出我的方向很棒,那就太棒了!

谢谢堆!

2 个答案:

答案 0 :(得分:0)

确保您的Ajax请求指定dataType: 'jsonp'。这将允许调用绕过同源策略并添加jQuery生成的回调函数名称。

确保您的服务器脚本可以检测到传递了回调函数名称的事实,并且它将响应包装在该函数中。

例如,使用回调调用您的服务时:

http://www.mycmssite.com/phppage.php?json=1&callback= jQuery17109598642324563116

你的回答将是:

jQuery17109598642324563116({json response here})

此外,success属性应设置为现有函数,该函数将对其接收的JSON数据执行某些逻辑。

  • 阅读documentation for $.ajax了解其他属性的详细信息,例如数据,以确保您了解此处的预期结果。

答案 1 :(得分:0)

$.ajax({
    url: 'http://www.mycmssite.com/phppage.php?json',
    dataType: 'json',
    data: {Iwant:'theData', thisIs:'somejson'},
    success: function(msg) {
        console.log('server answered:', msg);
        // do something with received message
    }
});

CORS标题更像是

header("Access-Control-Allow-Origin", "*")
header("Access-Control-Request-Method", "GET")
header("content-type", "application/x-javascript")

这些标题使JSONP的要求过时。