【发布时间】:2014-06-13 17:54:50
【问题描述】:
以下代码在浏览器中工作,我还根据这篇文章设置了服务器以使用 CORS:https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=http%3A%2F%2Fwww.loiane.com%2F2014%2F01%2Frequests-ajax-com-cross-origin-resource-sharing-cors-entre-sencha-touch-e-extjs-e-backend%2F
这是我的模型:
Ext.define('App.model.Jobs', {
extend: 'Ext.data.Model',
config: {
fields: ['category','type','contact','contactn','date', 'title', 'email', 'descr', 'link']
}
});
这是我商店的代码:
Ext.define('App.store.Jobs', {
extend: 'Ext.data.Store',
requires: ['App.model.Jobs','Ext.data.proxy.JsonP'],
config: {
model: 'App.model.Jobs',
storeId:'jobs',
proxy: {
type: 'ajax',
url: 'https://app.com/app/api/api.php',useDefaultXhrHeader: false
extraParams: {get: 'records', records: 'class'},
reader: {type: 'json', rootProperty:'data'}
},
grouper: {
groupFn: function(rec) {
return rec.get('category');
}, sortProperty: 'category'
},
autoLoad: true
}
});
这是我的清单的代码:
Ext.define('App.view.Jobs', {
extend: 'Ext.Container',
xtype: 'jobs',
requires: ['Ext.field.Search'],
config: {
top: 0, bottom: 0, left: 0, right: 0, layout: 'card', fullscreen: true,
items: [
{xtype: 'list', title: 'Jobs Listing', grouped: true, indexBar: true, itemTpl: '{title}',
listeners: {initialize: function() {
var store = Ext.getStore('jobs');
store.load();
this.setStore(store);
}}},
{xtype: 'panel', animate: true, scrollable: {direction: 'vertical'}, tpl: 'Job Title:<br/>{title}<br/>Job Type: <br/>{type}<br/>Position:<br/>{position}<br/>Description:<br/>{descr}<br/>Deadline:<br/>{date}<br/>Contact Person:<br/>{contactn}<br/>Contact Number:<br/>{contact}<br/>Email:<br/>{email}<br/>URL:<br/>{link}'
}
]
}
});
当我使用浏览器在浏览器中运行代码时,它运行良好。当我将其构建为本机应用程序时,它不会加载任何内容。 我列入了白名单
<access origin="*"/>
我也尝试将代码转换为 jsonP,但仍然没有在本机应用程序上加载任何内容,但在浏览器中可以正常工作
这是我的服务器代码:
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
【问题讨论】:
-
我并不特别熟悉 Android,但我知道在使用 Cordova 构建 iOS 应用程序时,我有时会看到 XCode 中记录的错误很有帮助。你在这里看到什么了吗?我怀疑 CORS 可能会失败,因为当您在 Cordova 应用程序中时,引用的“域”不存在。您可以尝试将 CORS 标头设置为简单的“*”
-
嗨,甚至设置了 header("Access-Control-Allow-Origin: *");似乎没有解决问题
-
您知道请求是在应用程序之外发出并到达服务器还是只是应用程序中没有加载任何内容?
-
嗨,这有点难说,因为当我添加这个网址时:'ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://…' 它工作正常。但是当我使用我的时,它不会加载任何记录。如果我可以收听成功和失败事件会更容易,但商店似乎忽略了侦听器事件。关于如何强制商店收听事件的任何建议?
-
我会尝试使用 Chrome 的远程调试功能,看看您是否可以查明任何运行时错误。
标签: cordova sencha-touch