在异常时使用不同的URL重试存储加载(使用外部URL)

时间:2011-09-20 22:02:24

标签: extjs extjs4

我的系统有两个服务器,一个是主动的,一个是被动的。我正在使用extjs4编写单页应用程序,该应用程序使用来自服务器的数据。 当我从store.load()获得异常时,我想使用不同的URL重试。 我在下面有这个代码,它将命令成功发送到新URL(被动服务器),而不是使用GET使用OPTIONS。同样由于某种原因,新命令也会导致异常,导致无限循环的原因。

知道我做错了什么或其他方法来完成将http命令重试到另一个URL吗?

var store = Ext.create('Ext.data.Store', {
        pageSize:25,
        autoLoad: false,
        model: 'VsaGui.VPool',
        proxy: {
            type: 'rest',
            url: activeMgmtUrl + 'vsacmd.xml?cmd=list_vpools',
            reader: {
                totalProperty: 'vpools-count',
                type: 'xml',
                record: 'vpool'
            },
            listeners: {
                exception: function(proxy, response, operation, eOpts ){
                            p = store.getProxy();
                            p.url = passiveMgmtUrl + 'vsacmd.xml?cmd=list_vpools';
                            p.read(operation);
                        }

            }    
        }         

    });

我做了一些研究,似乎问题不在代码中,而是在我的重试中我访问和外部URL(passiveMgmtUrl =“http://192.168.1.54/”)。 这就是Firefox发送OPTIONS方法的原因,而在IE9下第二个请求最终会出现“拒绝访问”。 那么关于如何连接到外部URL的任何想法?

1 个答案:

答案 0 :(得分:1)

如果您的第二个请求是另一个域,则必须使用jsonp作为代理而不是ajax(rest只是ajax的专用版本)。 Jsonp将允许您向外部域发出请求,否则您将被锁定到服务器的域中。

有关详细信息,请参阅http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.proxy.JsonP