0

Java 脚本中,当我们发送 GET 请求时,它不添加任何参数,但在EXT-JS中,它会自动添加 CallBack 参数。(我检查了 Wireshark 和萤火虫)

我们能够在瞻博网络 MFC URL 上的浏览​​器上看到 xml,因为它发送 GET 请求,但是当使用“回调参数”之类的任何参数(根据 Firebug、浏览器和wireshark)发送请求时,浏览器会显示 404 错误。

所以我需要在修改后的加载函数中从ScriptTagProxy创建一个新的代理扩展。请告诉我我该怎么做。

我做了以下但没有运气。

        var _Proxy = Ext.extend(Ext.data.MyScriptTagProxy({
         url: 'http://IP:PORT/App',
         method: 'GET',
         nocache: false,
         restful: true 
         }); 

 Ext.define('Ext.data.MyScriptTagProxy' {   
 extend: 'Ext.data.ScriptTagProxy',
 constructor:function(cnfg){
 this.callParent(arguments);//Calling the parent class constructor
      this.initConfig(cnfg);//Initializing the component
      this.on('beforerender',this.beforeRender);
 }});

如果主题还有另一种解决方案,请提出建议。

4

2 回答 2

0

这是问题所在:为了使用 JsonP (ScriptTagProxy),您的服务器需要将响应包装到 javascript 方法回调中并返回有效的 JavaScript 代码。任何其他格式都会失败,因为请求是使用<script>标签执行的,并且响应将由浏览器的 JavaScript 引擎解释。

此外,客户端需要能够将回调与原始请求相匹配——这就是 ExtJs 发送回调方法名称的原因,该名称对于特定请求是唯一的。

但是在我们深入研究之前,您是否知道 JsonP 需要服务器相应地准备响应数据。您的服务器(瞻博网络 MFC)是否支持此功能?

作为替代方案,您可以使用CORS它作为 JsonP 的替代方案引入。这种技术侵入性较小,并且需要为服务器上的 HTML 文档进行特殊的 HTTP 标头配置。ExtJsCORS通过Ext.data.Connection#cors支持。

于 2012-09-11T15:16:42.113 回答
0

最后我找到了解决方案,

我的问题:- 在 Qus 中提到。

我的解决方案:- 我通过 AJAX 向服务器发送请求,而不是保存响应文本,通过 jQuery 将其转换为 XML。然后将此值赋予 XMLStore 的数据字段。由于服务器在另一个域中,因此也禁用了 POP-Up 阻止程序。工具使用: - ExtDesigner

我的代码:-(对不起代码质量)

var doc = sendReq();

function sendReq() {
    var xmlstr = SendRequest();
    var doc1 = new ActiveXObject("Microsoft.XMLDOM");

    doc1.async = "false";
    doc1.loadXML(xmlstr);
    alert(" Xml is parsing ... ");

    return doc1;
}

function SendRequest() {
    var Url = "http://SERVER_IP:PORT/XMLPATH";

    xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = ProcessRequest;
    xmlHttp.open("GET", Url, false);
    xmlHttp.send();

    return xmlHttp.responseText;
}

function ProcessRequest() {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        if (xmlHttp.responseText != "Not found") {
            var str = xmlHttp.responseText;
        }
    }
}

MyStore = Ext.extend(Ext.data.XmlStore, {
    constructor: function (cfg) {
        cfg = cfg || {};
        MyStore.superclass.constructor.call(this, Ext.apply({
            storeId: 'MyStore',
            data: doc,
            record: 'resourcePool',
            autoLoad: true,
            fields: [{
                name: 'bandwidth',
                type: 'float'
            }, {
                name: 'name',
                type: 'string'
            }]

        }, cfg));
    }
});

new MyStore();
于 2012-09-20T13:08:51.747 回答