Sencha错误XMLHttpRequest无法加载http:// localhost .... Access-Control-Allow-Origin不允许使用Origin null

时间:2011-07-27 07:31:48

标签: ajax json sencha-touch

我在加载Sencha商店时遇到问题。我的商店声明是这样的:

Ext.regModel('Car',{

        idProperty: 'id', 
        fields: [
                 //'id', 'company', 'driver', 'carType','xCoordinate','yCoordinate'                  
                 {name: 'id', type: 'int'},
                 {name:'company', type:'string'} ,
                 {name:'driver', type:'string'},
                 {name:'carType', type:'string'},
                 {name:'xCoordinate', type:'int'},
                 {name:'yCoordinate', type:'int'}

                 ]                                   

    });

var strr= new Ext.regStore({

        id:'carStore',
        model:'Car',    //configuration option is the cars

        proxy: {
             type: 'ajax',
              url: 'http://localhost:8080/A/carStore.html&callback=?',
              reader: {
                type: 'json',
                root: 'carss'
              },
        },
        autoLoad: true
});

我将商店列入名单:

CarManagementSystem.views.carList = new Ext.List({
        id: 'carList',
        store: 'carStore',

        onItemDisclosure: function (record) {

            var selectedCar = record;
            CarManagementSystem.views.addNewCar.load(selectedCar);
            CarManagementSystem.views.viewport.setActiveItem('addNewCar', { type: 'slide', direction: 'left' });
        },
       itemTpl: '<div class="list-item-id">{id}</div>' +'<div class="list-item-driver">{driver}</div>'
    });

但是,当我尝试使用我的JSON文件加载列表时,我收到此错误:

XMLHttpRequest无法加载http://localhost:8080/A/carStore.html&callback=?&_dc=1311751412006&limit=25。 Access-Control-Allow-Origin不允许使用null。 煎茶-触摸debug.js:7212

未捕获的TypeError:无法读取未定义的属性“长度”

我将我的JSON文件保存为html格式,并保存在服务器中。我很感激任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:1)

您遇到了经典的CORS问题。

  • 这是一种名为web-security的浏览器安全性。如果您处于开发模式,则可以运行Chrome并禁用此标记。但是,如果您在浏览器上生产应用程序,则需要绕过此ajax规范限制。
  • 要绕过它,您可以使用代理(例如在同一域上创建后端脚本将为您加载资源),或者您可以使用JSON-P。为此,您需要将商店更改为脚本标签,但您还需要服务器能够检测到回调参数,并将其作为JS函数发送给您,这些函数在插入DOM时会自动执行。

我将补充说,在Phonegap中运行时不会出现此问题,因为PhoneGap没有运行Web服务器,而是使用file:// protocol提供文件。

如果您想了解更多信息,我建议您在开发移动网络应用时这是一个常见的问题,您应该了解JSON-P是什么,CORS是什么以及它是如何工作的。

答案 1 :(得分:0)

发出AJAX请求时,无法命中端口号(8080)。如果您最终需要跨域请求,请将代理类型更改为“scripttag”。

答案 2 :(得分:0)

您应该将代理类型从'ajax'更改为'type:'scripttag'