2013-05-22 41 views
0

根據Same Origin Policy,SOP不適用於file://協議,但爲什麼我的代碼不起作用?我正在從本地系統運行此測試頁,並且在與html頁面相同的目錄中有abc.txt。如果我將URL更改爲http://www.google.com/,則不起作用。我不明白爲什麼,有人能解釋一下嗎?不能從本地html頁面ajax本地文件

<!doctype html> 
<html lang="us"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery UI Example Page</title> 
    <link href="css/sunny/jquery-ui-1.10.2.custom.css" rel="stylesheet"> 
    <script src="js/jquery-1.9.1.js"></script> 
    <script src="js/jquery-ui-1.10.2.custom.js"></script> 
    <script> 
    $.support.cors = true; 
    $(function(){ 
     $(".btn1").button().click(function(){ 
      $.ajax({ 

       url: "abc.txt" 

      }).done(function(result) { 
       alert("done"); 
       $(".content").html(result); 
      }).fail(function() { 
       alert("error"); 
      }); 
     }); 

    }); 

    </script> 
</head> 
<body> 

<button class="btn1">Click me!</button> 

<div class="content"></div> 

</body> 
</html> 

被修改: 控制檯印刷如下:

的XMLHttpRequest不能加載 文件:/// C:/用戶/ YC /桌面/ jquery的%20ajax%20testing/jquery- UI-1.10.2.custom/jQuery的UI-1.10.2.custom /的abc.txt。 Access-Control-Allow-Origin不允許原始位置爲null。

*它不適用於Firefox,IE。

+0

嘗試在您的ajax調用中設置'dataType:「text」,'選項。 –

+1

您可以使用'--disable-web-security '或' - 允許文件訪問文件' –

+0

控制檯說什麼 –

回答

2

這不是一個錯誤,它是一種安全功能,您無法/不會在客戶端計算機上執行任何操作。

在Chrome中,你可以通過添加以下標誌的命令行

--disable-web-security

在Firefox上可能有類似的東西,但我不知道它禁用它。這僅用於開發目的,並且不能依賴於應用程序中的這種行爲。

你真的應該只使用一臺服務器...

+0

第二個選項不再是有效的規避 - 通過編輯刪除。 – smaudet

+0

@smaudet編輯請求被拒絕。留下評論就夠了,然後由答案的作者決定是否應將第二選項從答案中刪除。 –

0

稍微較安全「」 - 禁用網絡安全「的命令行標誌

--allow-file-access-from-files 

這不完全關閉所有安全功能。此外,此標誌不應用於生產環境中......