2013-04-08 82 views
4

我目前正在開發一個帶有jQM的移動Web應用程序。是否可以通過AJAX加載跨域網頁?

雖然我尋找我的問題的答案,我找不到任何好的答案。

這裏是我的目標:

  1. 下載其他域中的網頁的特定元素。
  2. 通過對話框顯示數據。

由於跨域問題,我被困在第一步。

有些人寫過關於使用帶回調函數的JSONP,但似乎這種技術只在處理JSON格式時才起作用。

我還讀到,由於安全問題,JavaScript不支持在另一個域中下載html頁面。

他們對嗎?

有沒有辦法通過JavaScript實現我的目標?

+2

您可以向本地服務器提交請求,檢索外部頁面,然後返回以響應AJAX請求。我不確定有更好/更簡單的方法來做到這一點。 – 2013-04-08 15:22:00

+0

https://developer.mozilla。org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript – epascarello 2013-04-08 15:22:00

+0

您聽說過的權利 - 除非您擁有對外部域的控制權,並且可以將其配置爲允許來自第二個域的AJAX,那麼您只能使用AJAX從數據庫中檢索數據一個外部域使用JSONP。 – Blazemonger 2013-04-08 15:22:21

回答

11

有針對此問題的解決方法很多(JSONP,反向代理,「訪問控制允許來源」,等等。)在這裏非常廣泛線程描述上SO: Ways to circumvent the same-origin policy

據我所知,我唯一經常使用的另一個是James Padolseys解決方案:http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

+1

謝謝,我決定用這種方式。它運作良好。 – 2013-04-08 15:35:44

+1

這裏是每個人的鏈接 - http://jsfiddle.net/hxzyC/ – 2013-04-08 15:43:04

+0

哇,第一個鏈接也非常有用!謝謝! – 2013-04-08 15:48:59

2

JSONP允許任何Javascript對象的跨源共享。一個字符串是一個Javascript對象,在你的情況下,你可以提供元素的標記作爲字符串包含,並使用標準的JavaScript技術來處理它。

如果您願意,也可以使用Cross-origin resource sharing,雖然它還有其他性能缺陷,例如需要多個非GET請求,但支持得不到廣泛支持,但不會產生minor JSONP性能影響。

5

這樣做的最好方法是使用本地代理。換句話說:在腳本X中執行請求服務器端,並從JavaScript中調用此腳本X.這樣,您的「跨域」查詢就會從服務器發出,並且沒有限制。

+0

感謝您的建議。通過問一個問題,我可以學到很多我從未想過的方法: – 2013-04-08 15:47:44

4

這是可能的兩種方式。

首先,僅當外部服務器設置了cors標頭時:http://enable-cors.org/server_apache.html。然後你可以正常加載它。如果該標題未設置,則不可能直接。

其次,您可以使用服務器端作爲代理。如果您在靜態資源上執行GET請求,這真的很有用。否則,服務器上的負載將非常高。如果您沒有要使用的服務器,則可以使用YQL,但對於生產使用情況來說這很粗略。 http://davescoolblog.blogspot.com/2012/02/client-side-cross-domain-data-yql-hack.html

+0

使用標題方式,它將最適合你。使用'post','get'和'json' – PitaJ 2013-04-08 15:24:23

+0

但是,如果他們沒有控制其他域,那麼這是不可能的。 – 2013-04-08 15:33:48

+0

它在所有瀏覽器中並不完全支持,IE7不支持CORS,IE8/9需要插件(或者您自己的修改)才能使用CORS和jQuery的ajax方法。 – 2013-04-08 15:36:12

相關問題