我目前正在開發一個帶有jQM的移動Web應用程序。是否可以通過AJAX加載跨域網頁?
雖然我尋找我的問題的答案,我找不到任何好的答案。
這裏是我的目標:
- 下載其他域中的網頁的特定元素。
- 通過對話框顯示數據。
由於跨域問題,我被困在第一步。
有些人寫過關於使用帶回調函數的JSONP,但似乎這種技術只在處理JSON格式時才起作用。
我還讀到,由於安全問題,JavaScript不支持在另一個域中下載html頁面。
他們對嗎?
有沒有辦法通過JavaScript實現我的目標?
我目前正在開發一個帶有jQM的移動Web應用程序。是否可以通過AJAX加載跨域網頁?
雖然我尋找我的問題的答案,我找不到任何好的答案。
這裏是我的目標:
由於跨域問題,我被困在第一步。
有些人寫過關於使用帶回調函數的JSONP,但似乎這種技術只在處理JSON格式時才起作用。
我還讀到,由於安全問題,JavaScript不支持在另一個域中下載html頁面。
他們對嗎?
有沒有辦法通過JavaScript實現我的目標?
有針對此問題的解決方法很多(JSONP,反向代理,「訪問控制允許來源」,等等。)在這裏非常廣泛線程描述上SO: Ways to circumvent the same-origin policy
據我所知,我唯一經常使用的另一個是James Padolseys解決方案:http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
謝謝,我決定用這種方式。它運作良好。 – 2013-04-08 15:35:44
這裏是每個人的鏈接 - http://jsfiddle.net/hxzyC/ – 2013-04-08 15:43:04
哇,第一個鏈接也非常有用!謝謝! – 2013-04-08 15:48:59
JSONP允許任何Javascript對象的跨源共享。一個字符串是一個Javascript對象,在你的情況下,你可以提供元素的標記作爲字符串包含,並使用標準的JavaScript技術來處理它。
如果您願意,也可以使用Cross-origin resource sharing,雖然它還有其他性能缺陷,例如需要多個非GET請求,但支持得不到廣泛支持,但不會產生minor JSONP性能影響。
這樣做的最好方法是使用本地代理。換句話說:在腳本X中執行請求服務器端,並從JavaScript中調用此腳本X.這樣,您的「跨域」查詢就會從服務器發出,並且沒有限制。
感謝您的建議。通過問一個問題,我可以學到很多我從未想過的方法: – 2013-04-08 15:47:44
這是可能的兩種方式。
首先,僅當外部服務器設置了cors標頭時:http://enable-cors.org/server_apache.html。然後你可以正常加載它。如果該標題未設置,則不可能直接。
其次,您可以使用服務器端作爲代理。如果您在靜態資源上執行GET請求,這真的很有用。否則,服務器上的負載將非常高。如果您沒有要使用的服務器,則可以使用YQL,但對於生產使用情況來說這很粗略。 http://davescoolblog.blogspot.com/2012/02/client-side-cross-domain-data-yql-hack.html
使用標題方式,它將最適合你。使用'post','get'和'json' – PitaJ 2013-04-08 15:24:23
但是,如果他們沒有控制其他域,那麼這是不可能的。 – 2013-04-08 15:33:48
它在所有瀏覽器中並不完全支持,IE7不支持CORS,IE8/9需要插件(或者您自己的修改)才能使用CORS和jQuery的ajax方法。 – 2013-04-08 15:36:12
您可以向本地服務器提交請求,檢索外部頁面,然後返回以響應AJAX請求。我不確定有更好/更簡單的方法來做到這一點。 – 2013-04-08 15:22:00
https://developer.mozilla。org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript – epascarello 2013-04-08 15:22:00
您聽說過的權利 - 除非您擁有對外部域的控制權,並且可以將其配置爲允許來自第二個域的AJAX,那麼您只能使用AJAX從數據庫中檢索數據一個外部域使用JSONP。 – Blazemonger 2013-04-08 15:22:21