2012-11-06 45 views
0

我不確定這是否是跨域問題。我正嘗試使用$.ajax加載文件。但是,一些文件,我得到的readyState = 4和一些文件,我得到的readyState = 1jquery中的這個跨域問題?

這是我跑我的茉莉花測試 file:///home/myname/development/path1/path2/src/test/java/javascript/jasmine/SpecRunner.html

並在代碼我用jQuery.pyte需要相關文件的路徑。但它停留在readyState的:1,當代碼涉及到$就

,如果我做這樣的事情,它返回的readyState = 4正確,並打印出裏面的內容SpecRunner.html

 

$.ajax({url: 'file:///home/myname/development/path1/path2/src/test/java/javascript/jasmine/SpecRunner.html', async: false}).responseText 
 

但如果我做了這樣的事情,我只準備好了狀態= 1,沒有任何回報。

 

$.ajax({url: 'file:///home/myname/development/path1/path2/src/main/webapp/static/js/core/application/FileThatIWant.js', async: false}).responseText 
 
+1

這是最有可能是跨域問題有XHRv2兼容的瀏覽器。我認爲,本地請求的文件不會獲得原始文件,因此瀏覽器無法確定文件與文檔具有相同的來源。 –

+0

有沒有解決方法?感謝您的快速回復。 – toy

+0

'file'僞協議不類似於'https?'。有微妙的差異。我總是推薦使用服務器。 – alex

回答

1

您應該避免使用file:// URL,因爲瀏覽器不允許在很多不同的地方使用它們。嘗試XAMPP這是一個簡單的使用本地網絡服務器,你將明確需要一個。

1

是的,這是一個跨域問題。你可以通過強制jQuery使用跨域AJAX(JSONP)來解決這個問題。

$.ajax({ 
    url:   "yoururl", 
    cache:   false, 
    crossDomain: true, 
    data:   {}, //put your GET parameters here or directly into the url 
    dataType:  "jsonp", 
    processData: true, 
    success:  function(data, textStatus, jqXHR){ 
         //This will be executed if it worked 
        }, 
    error:   function(data, textStatus, jqXHR){ 
         //This will be executed if it failed 
        }, 
    timeout:  4000, //You can put any value here 
    traditional: true, 
    type:   "GET" 
}); 

jQuery將自動添加含有一個隨機字符串(&回調= XXXXXX)回調參數。 目標URL需要輸出如下:

XXXXX(your_output_encoded_in_JSON); 

其中XXXXX是隨機的字符串。這樣做的PHP代碼是:

echo $_GET["callback"]."(".json_encode($myoutput).");"; 

請確保PHP(或任何您使用的語言)頁面只輸出! 相反,如果要查詢的頁面沒有動態構建,如HTML頁面,則需要將以下選項添加到$就選擇對象:

jsonp:   false, 
jsonpCallback: "mycallback", 
mimeType:  "text/javascript", 

你的HTML文件將包含的東西像這樣:

mycallback("<html><head></head><body>TEST PAGE. This is a double quote: \" and I didn't forget to escape it!</body></html>"); 

這種技術非常方便,可以繞過瀏覽器硬編碼的嚴格跨域限制,但它只支持GET參數。 XMLHTTPRequest的v2支持跨域請求,但我們不能假設所有用戶之前至少2016年 http://caniuse.com/xhr2