2013-07-12 43 views
1

我想知道是否有任何方法來檢索從iframe發送的ajax請求的響應。有沒有辦法檢索從iframe發送的ajax響應?

iframe的做類似如下:在IFRAME

  1. 腳本發送Ajax請求
  2. iframe中獲得響應,並更新內容iframe中

我想怎麼辦是在iframe之外攔截該請求,並使用該信息更新頁面。

如果您使用chrome的開發工具,並轉到網絡選項卡,您可以看到iframe所做的請求/響應。如果有窗口事件或類似的東西,每次頁面上出現響應都會觸發,那將會很不錯。

注意:iframe是不在同一個域中的頁面。

+0

跨域是問題,而不是將響應放置到非iframe文檔中。 AJAX調用發生在另一個域上?你是否也有能力在該域上編寫腳本? – DevlshOne

+0

跨域=不會發生 – epascarello

回答

4

如果孩子的iframe與父母不在同一個域中,那麼您無法真正做任何跨瀏覽器的工作。假設您可以控制兩個框架上的客戶端腳本,請參閱下面的jasonjifly的答案,瞭解適用於某些瀏覽器的技術。

如果父母和孩子在同一個域上,那麼你可以實現你正在尋找的東西。

例如,假設你使用jQuery,你可以在你的iframe的代碼:

$.ajax(function() { 
    ..... 
    complete: function() { 
     window.parent.onAjaxComplete('Hi there'); 
    } 
}); 

隨着這個代碼在父框架:

function onAjaxComplete(msg) 
{ 
    alert(msg); 
} 

爲了達到類似的結果在跨域方案中,您可以讓父框架輪詢服務器。當服務器收到來自子iframe的ajax請求時,它可以通過輪詢服務提醒父頁面。顯然這隻適用於你控制由子iframe調用的服務。

+0

所以我假設如果我沒有控制iframe(我不這樣做),我沒有多少能做的? – kennypu

+1

@kennypu不,你不能做任何事情,這是安全,讓你從閱讀我的電子郵件:) – epascarello

+0

@epascarello啊,好吧謝謝你的信息! – kennypu

2

從理論上講,它是被禁止的兩個交叉域iframe之間的溝通,由於同源策略,請參考本頁面:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript

HTML5之前,我們有一些解決方法:

  1. 如果您只是想使用iframe來獲取跨域數據,您可以使用JQuery:JSONP,其實質是使用。 「」允許執行跨域javascript。

  2. 另一種方式是 「在一個iframe的iframe的iframe」,你可以參考這個網頁:http://blog.cakemail.com/the-iframe-cross-domain-policy-problem/

HTML5:

  1. 窗口。postMessage的,請參閱本頁面:https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

  2. HTML5 CORS,你需要配置服務器,請參閱本頁面:http://www.html5rocks.com/en/tutorials/cors/

我的建議是使用解決方案1,它可以工作在幾乎所有主流瀏覽器。

相關問題