2014-01-24 34 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)。

相关问题