2012-06-05 30 views
1

我是JSONP的新手,所以我希望有人能从头开始帮助我。从PHP站点发送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); 

现在,这是我初步的了解,我知道它的千疮百孔。但是,如果有人能指出我的方向真的很棒!

谢谢堆!

+0

这似乎没问题。尝试一下。但是如果您希望各种网站访问您的json数据,请不要忘记设置[CORS headers](https://developer.mozilla.org/en/http_access_control)。 –

+0

'var myvar = success; document.write(myvar);'是stange。您的回调函数必须设置(并使用)数据。 –

+0

感谢dystroy - 这是我无法理解的:你能给我写一个你如何做这一行的例子吗?通过CORS头,你的意思是:header(“content-type:application/json”); – MeltingDog

回答

0

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

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

例如,当你的服务被称为一个回调:

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

你的反应会是这样的:

jQuery17109598642324563116({json response here}) 

此外,成功属性应设置到现有的功能将对其接收到的JSON数据执行一些逻辑。

  • 阅读documentation for $.ajax了解有关其他属性(如数据)的详细信息,以确保您了解此处预期的内容。
+0

既然我们有[CORS](https://developer.mozilla.org/en/http_access_control),我们就不再需要使用JSONP了。 –

+0

没错,只要你的应用程序不需要支持IE 6和7以前的浏览器。我只是回答了问题。 – Claude

+0

是的。我只是不认为我们应该支持IE7,但你在技术上是完全正确的。 –

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的要求已经过时了。

+0

好吧我真的很接近,继承人什么林进入控制台: GET http:// localhost/mbff_cms /?jsoncallback = jQuery1720037476439494639635_1338898608215&jsoncallback = jsoncallback&_ = 1338898608228 jquery-1.7.2.js:8123 – MeltingDog

相关问题