2012-09-06 190 views
0

我正在使用AJAX調用來從服務器獲取HTML的應用程序。 當我在服務器上運行它時,一切正常。Jsonp跨域AJAX

但是當我在本地主機上運行時,出現了'Access-Control-Allow-Origin'錯誤。 我看着周圍,似乎使用jsonp可能是解決方案。

所以,我的Ajax調用看起來像這樣:

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    crossDomain: true, 
    type: 'GET', 
    success: function(data){ 
     // should put the data in a div 
    }, 
    error: function(){ 
     //do some stuff with errors 
    } 
}); 

我得到的html從服務器,但我一直有這樣的錯誤:

Uncaught SyntaxError: Unexpected token < 

有沒有辦法來包裝JSONP響應在HTML?

謝謝!

回答

1

如果你想通過jsonp獲取數據,那麼服務器端需要支持jsonp。

沒有辦法只是更改dataType以獲取數據。

如果服務器端不支持jsonp,那麼你需要在你的localhost中創建一個代理。

+0

)抓住它,事實是,我得到的數據回來了..但帶有「語法錯誤」..所以所有的代碼都在客戶端..但我無法使用它。 –

+0

@GuillaumeleFloch是的,你可能會返回一些含義的數據,它必須導致語法錯誤,請檢查jsonp的工作方式。 – xdazz

+0

@GuillaumeleFloch獲取語法錯誤的原因是JSONP利用動態連接的'

2

您不能使用JSONP來獲取HTML文檔。您需要將您的HTML包裝到JavaScript變量中。 JSONP有一些非常具體的要求,使其能夠正常工作,包括回調函數/屬性。如果您不控制承載目標頁面的服務器,則無法使其工作。這是一項安全措施,可防止隨機頁面通過AJAX呼叫從您登錄的網站竊取您的個人信息。

UPDATE

我更仔細閱讀你的問題。這聽起來像是你的問題在於你在一個沒有問題的開發環境中。 JSONP不是答案,因爲爲了使頁面在開發過程中運行起來很麻煩。您應該創建目標HTML的本地副本,並使用相對或服務器絕對URL(例如"/the/page/i/need.html"而不是"http://myserver.com/the/page/i/need.html"

+0

不,這不是一個開發工作...我需要那個在生產中運行.. –

+0

@GuillaumeleFloch你在'localhost'上運行你的生產站點嗎?你說它在服務器上工作正常。 – Pete

+0

是的,我首先在服務器上開發了應用程序。但現在,我想把它作爲一個移動應用程序來封裝,這就是爲什麼我要在本地主機上測試它。 –