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

Posted

技术标签:

【中文标题】Sencha 错误 XMLHttpRequest 无法加载 http://localhost.... Access-Control-Allow-Origin 不允许 Origin null【英文标题】:Sencha Error XMLHttpRequest cannot load http://localhost.... Origin null is not allowed by Access-Control-Allow-Origin 【发布时间】:2011-07-27 07:31:48 【问题描述】:

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

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 不允许 Origin null。 sencha-touch-debug.js:7212

未捕获的类型错误:无法读取未定义的属性“长度”

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

谢谢!

【问题讨论】:

【参考方案1】:

您遇到了经典的 CORS 问题。

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

我要补充一点,在 Phonegap 中运行时不会出现这个问题,因为 PhoneGap 没有运行 Web 服务器,而是使用 file:// 协议提供文件。

如果您想了解更多信息,我建议您在开发移动 Web 应用程序时使用常见的 pb,您应该了解 JSON-P 是什么、CORS 是什么以及它是如何工作的。

【讨论】:

【参考方案2】:

发出 AJAX 请求时,您不能点击端口号 (8080)。如果您最终需要跨域请求,请将您的代理类型更改为“scripttag”。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Sencha 错误 XMLHttpRequest 无法加载 http://localhost.... Access-Control-Allow-Origin 不允许 Origin null的主要内容,如果未能解决你的问题,请参考以下文章

Sencha 错误跟踪器网址

使用 Sencha Cmd5 从 Sencha Touch 生成 Android apk,无错误,无输出

sencha 应用程序构建生产错误?

Sencha-Touch:未捕获的类型错误:无法读取未定义的属性“代理”

sencha 日历错误未捕获类型错误:无法读取页面加载时未定义的属性“indexOf”

Sencha cmd 构建错误:shellscript 返回:1