2014-01-24 35 views
3

我想創建一個jQuery網格,它從json文件中獲取數據,在Firefox中做的很好。但不會對谷歌Chrome瀏覽器 我從 trirand examples谷歌瀏覽器 - 沒有訪問控制允許源標頭存在於請求的資源

這樣我給的代碼來獲得JSON數據

jQuery("#rowed2").jqGrid({ 
    url:'datagrid_data.json', 
    datatype: "json", 
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], 
    colModel:[ 
     {name:'id',index:'id', width:55}, 
     {name:'invdate',index:'invdate', width:90}, 
     {name:'name',index:'name asc, invdate', width:100}, 
     {name:'amount',index:'amount', width:80, align:"right"}, 
     {name:'tax',index:'tax', width:80, align:"right"},  
     {name:'total',index:'total', width:80,align:"right"},  
     {name:'note',index:'note', width:150, sortable:false}  
    ], 
    rowNum:10, 
    rowList:[10,20,30], 
    pager: '#prowed2', 
    sortname: 'id', 
    viewrecords: true, 
    sortorder: "desc", 
    caption:"JSON Example" 
}); 
jQuery("#rowed2").jqGrid('navGrid','#prowed2',{edit:false,add:false,del:false}); 

回答

0

訪問控制產地標頭設置和讀取控制訪問數據跨域的瀏覽器。這是一個安全問題。

在這裏,如果沒有CORS(跨源請求共享)標頭,您無法從不同的域訪問JSON而不是腳本運行。

有一些解決方法。

最常見的是在服務器端啓用訪問控制源標頭。此服務器設置告訴瀏覽器,他們可以自由使用JSON數據,這通常是因爲它不敏感。 http://enable-cors.org/

圍繞CORS的另一種常見方法是以JSONP格式傳遞yoru數據。這是另一個服務器端修復,它將JSON數據封裝在函數中以在客戶端執行。 What is JSONP all about?

+0

謝謝@Patrick Gunderson。我沒有在服務器上運行這個文件。我使用靜態html和jquery(例如:http://trirand.com/blog/jqgrid/jqgrid.html#)。它在Firefox上正常工作。但不能在chrome中工作 – ess

+0

您是通過file://訪問文件的嗎?這將解釋爲什麼FF和鉻的表現不同。一旦尊重本地文件的CORS,另一個不是 –

+0

ys ...我通過file訪問文件:/// – ess

1

如果我正確理解您的問題:您無法在Google Chrome中按照Ajax請求訪問本地文件。這是設計。如果確實需要去改變,你必須有額外的參數--allow-file-access-from-files開始的chrome.exe(以下簡稱「 - 」應該被兩次寫入):

Chrome.exe --allow-file-access-from-files 

重要的是,你必須關閉瀏覽器的所有正在運行的情況下, .exe之前。在這種啓動過程中,您不喜歡的安全功能將被關閉,您將能夠按照Ajax訪問本地文件。

Chrome.exe的選項列表描述爲here(同樣見here)。

相關問題