使用jsonp的extjs,从远程url访问数据

时间:2014-02-11 13:10:40

标签: extjs

使用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);

                        }
                    }
                });

2 个答案:

答案 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行

Flickr Callback Function
JsonP callbackKey