2009-01-21 42 views
8

我可以創建一個窗體並使用它來對任何站點執行POST請求,事情是FORM方法不是異步的,我需要知道頁面何時完成加載。我嘗試使用帶有窗體的iframe來解決這個問題,但沒有成功。通過JavaScript的異步跨域POST請求?

任何想法?

編輯

不幸的是我有過的響應數據沒有控制,從XML,JSON變化到簡單的文本。

+0

爲什麼您的iframe嘗試失敗?我有一個預感,它應該工作。你能詳細說明你採取的方法嗎? – 2009-01-21 21:23:23

+0

如果您無法控制響應數據,那麼這不會構成安全風險,因爲加載在iframe上的頁面可以使用`window.parent`訪問您的頁面的DOM。 – andho 2010-10-25 08:26:12

回答

11

您可以捕獲onload事件iframe。將您的form定位到iframe並監聽onload。不過,您將無法訪問iframe的內容,只能訪問該事件。

嘗試這樣:

<iframe id='RS' name='RS' src='about:blank' onload='loaded()'></iframe> 

<form action='wherever.php' target='RS' method='POST'>...</form> 

腳本塊:

var loadComplete = 0 
function loaded() { 
    //avoid first onload 
    if(loadComplete==0) { 
     loadComplete=1 
     return() 
    } 
    alert("form has loaded") 
} 
1

如果從跨域post發回的數據是JSON,那麼您可以動態地添加一個指向返回數據的URI的腳本標記。瀏覽器將加載該「腳本」,然後您可以從其他JavaScript訪問。

+0

我無法控制響應數據。 – 2009-01-21 21:14:40

+0

腳本標記也只有GET,-1。 – 2009-01-21 21:15:44

+0

當然,響應類型並不是任意的。他們不會向您發送XML一次,然後下一個請求將是JSON。決定返回類型的邏輯背後必須有一些邏輯。 – Sampson 2009-01-21 21:16:19

-7

你不能做任何使用JavaScript的跨域。你必須使用PHP或ASP等後端語言。

0

YUI3IO對象提供跨域請求,但是這種情況並因此使用它嵌入在一個小的Flash控件頁。

雖然有很多工作需要通過JavaScript進行安全的跨域請求,但目前需要使用Flash或Silverlight等插件作爲請求的橋樑。

2

如果您想製作跨域請求,您應該進行JSON調用或使用服務器端代理。服務器端代理很容易設置,不知道爲什麼人們避免這麼做。在其中設置規則,以便人們不能使用代理來請求其他事情。