【发布时间】:2009-06-30 16:41:15
【问题描述】:
使用 ExtJS 2.2.1,我有一个容器元素,它应该使用以下方法从服务器加载一段 HTML:
autoLoad: { url: 'someurl' }
这在 Firefox 中运行良好,但对于 IE7,这会导致 ext-all-debug.js 中的第 7170 行出现语法错误:
this.decode = function(json){
return eval("(" + json + ')');
};
我通过把这个函数变成这个来解决这个问题:
this.decode = function(json){
return eval('(function(){ return json; })()');
};
然后 autoLoad 在两个浏览器中都运行良好,但是还有一些奇怪的错误,此外,你真的不想在 ExtJS 库中修复这个问题,因为它将无法维护(尤其是在缩小的 ext-all.js 中就像一行半兆的 Javascript)。
我还没有找到很多关于这个错误的信息。
我尝试过的变体:
// With <script> tags around all the HTML
autoLoad: { url: 'someurl', scripts: true }
// With <script> tags around all the HTML
autoLoad: { url: 'someurl', scripts: false }
反之亦然,没有<script> 标签。 HTML 中也没有任何 Javascript,但应该有可能,因为最终我们将在返回的 HTML 中使用 Javascript。
问题不在于 HTML,因为即使使用最简单的 HTML,错误也是一样的。
更新 - 对多诺万的回应:
使用 this 的最简单的情况是:
changeRolesForm = new Ext.Panel({
height: 600,
items: [{ autoScroll: true, autoLoad: WMS.Routing.Route("GetRolesList", "User") + '?userID=' + id}]
});
这里不涉及数据存储。响应类型也是text\html,而不是json,所以也不能混淆它。如前所述,它在 Firefox 中运行良好,在 Firefox 中,它也执行相同的 eval 函数,但没有错误。所以它不像Firefox遵循不同的执行路径,它是相同的,但没有eval上的错误。
【问题讨论】:
-
没有一个“答案”解决了错误只发生在 IE 中的事实。我们在 Ext 3.3.0 中仍然遇到同样的事情。
-
嗨 Julian,如果您查看 FireBug,服务器返回了什么? Ext 调用服务器,之后它在 IE 中死掉,如果请求和响应被发布(包括标题)会很有帮助
-
我建议使用 Charles Proxy 来获取 Rob 所追求的信息,因为 IE 调试工具很糟糕
-
朱利安本人已经回答了这个问题。也许有人应该从这个问题中删除赏金
标签: javascript internet-explorer extjs autoload