我可以創建一個窗體並使用它來對任何站點執行POST請求,事情是FORM方法不是異步的,我需要知道頁面何時完成加載。我嘗試使用帶有窗體的iframe來解決這個問題,但沒有成功。通過JavaScript的異步跨域POST請求?
任何想法?
編輯
不幸的是我有過的響應數據沒有控制,從XML,JSON變化到簡單的文本。
我可以創建一個窗體並使用它來對任何站點執行POST請求,事情是FORM方法不是異步的,我需要知道頁面何時完成加載。我嘗試使用帶有窗體的iframe來解決這個問題,但沒有成功。通過JavaScript的異步跨域POST請求?
任何想法?
編輯
不幸的是我有過的響應數據沒有控制,從XML,JSON變化到簡單的文本。
您可以捕獲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")
}
如果從跨域post發回的數據是JSON,那麼您可以動態地添加一個指向返回數據的URI的腳本標記。瀏覽器將加載該「腳本」,然後您可以從其他JavaScript訪問。
我無法控制響應數據。 – 2009-01-21 21:14:40
腳本標記也只有GET,-1。 – 2009-01-21 21:15:44
當然,響應類型並不是任意的。他們不會向您發送XML一次,然後下一個請求將是JSON。決定返回類型的邏輯背後必須有一些邏輯。 – Sampson 2009-01-21 21:16:19
你不能做任何使用JavaScript的跨域。你必須使用PHP或ASP等後端語言。
如果您想製作跨域請求,您應該進行JSON調用或使用服務器端代理。服務器端代理很容易設置,不知道爲什麼人們避免這麼做。在其中設置規則,以便人們不能使用代理來請求其他事情。
爲什麼您的iframe嘗試失敗?我有一個預感,它應該工作。你能詳細說明你採取的方法嗎? – 2009-01-21 21:23:23
如果您無法控制響應數據,那麼這不會構成安全風險,因爲加載在iframe上的頁面可以使用`window.parent`訪問您的頁面的DOM。 – andho 2010-10-25 08:26:12