使用extjs,我从一个系统运行服务器,在另一个系统中提供url,我在extjs ver:4.02中使用JSONP,当我检查响应即时获取json格式的数据,当我尝试在控制台中打印或存储我没有得到..我的extjs代码... ...
<script type="text/javascript">
Ext.Ajax.cors = true;
Ext.Ajax.useDefaultXhrHeader = false;
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['empid', 'name', 'email']
});
var myStore = Ext.create('Ext.data.Store', {
model: 'User',
autoLoad:true,
proxy: {
type: 'jsonp',
// url : 'data/tagfamily.json',
url:'http://192.168.7.70:8080/palamanagement/user/getAllRecords',
},
listeners:{
'load':function( store, records, successful, eOpts ){
alert(records);
console.log(records);
}
}
});
答案 0 :(得分:2)
您必须返回以下内容:
someCallback({
users: [
{
id: 1,
name: "Ed Spencer",
email: "ed@sencha.com"
}
]
});
所以你已经拥有了你需要的JSON;您只需要服务器响应将JSON包装在回调中,以便JSONP代理可以执行并使用数据加载您的商店。
因此,在处理JSONP请求时,服务器的脚本需要识别作为请求的一部分发送的“回调”参数。然后,它需要使用此参数的值来包装您的JSON响应。
请务必阅读我和Oguz发布的文档:他们很好地概述了要求。但是如果你没有回复回调,那么你永远不会得到标准的JSON响应来使用JSONP代理。
答案 1 :(得分:0)
当您从DOMAIN-A请求DOMAIN-B时,您应该在代理定义中提供回调函数。回调函数将在请求完成后使用。
例如,在Flickr REST服务中,有jsoncallback
参数,我们应该给出函数名称以完成我们的请求。这样,我们的请求网址将是:
.../?jsoncallback=ourFunction
为了能够提供我们的函数名称,ExtJS中有一个属性callbackKey
。
像这样:
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['empid', 'name', 'email']
});
Ext.data.JsonP.request('http://api.flickr.com/services/feeds/photos_public.gne', {
callbackKey: 'jsoncallback',
callback: ourFunctionName
});
或
Ext.data.JsonP.request('http://api.flickr.com/services/feeds/photos_public.gne', {
callbackKey: 'jsoncallback',
callback: function(data) {
...
}
});
PS:我知道,你不会在doc中找到callback
属性,只是为了确保有。检查ext-all-debug-w-comments.js
文件,第108486行