2012-06-05 89 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

相關問題