【问题标题】:Exception when assigning value to IXMLHttpRequest object in IE7 and IE8在 IE7 和 IE8 中为 IXMLHttpRequest 对象赋值时出现异常
【发布时间】:2010-12-24 13:42:24
【问题描述】:

以下代码不是我编写的,我也不是 Javascript 专家。因此,如果您认为这是一个微不足道的错误,请原谅。 但是这里是代码:

jQuery.ajax({
    type: barobj.method,
    url: handler,
    beforeSend: function (request) {
        request.vote_id = vid;
            ...
    },
    complete: function (request, textStatus){
           jQuery('#actor').filter("[title='"+request.vote_id+"']")
           ...
    },

它在 FF、Chrome、Safari 中运行良好,但在 IE7 和 IE8 中却没有(惊喜?)。

例外是Error: Object doesn't support this property or methodrequest.voteid = vid 行 经过一些调试,我发现在 FF 中,request 的类型为 XMLHttpRequest,而在 IE 7 和 8 中,它的类型为 IXMMHttpRequest

那么异常的原因是什么?以及如何以可以取回 onComplete 事件中的 vote_id 值的方式解决它?

非常感谢,

法比恩。

【问题讨论】:

    标签: javascript jquery ajax internet-explorer xmlhttprequest


    【解决方案1】:

    Javascript 支持闭包,因此您的完整函数应该能够访问调用代码范围内的任何变量。您无需显式保留并将 vid 值传递给它。

    jQuery.ajax({
       type: barobj.method,
       url: handler,
       beforeSend: function (request) { },
       complete: function (request, textStatus){
              jQuery('#actor').filter("[title='"+ vid +"']")
              ...
       },
    

    【讨论】:

    • 谢谢。有用。但是你知道为什么 IE 有异常,而 FF 没有吗?
    • JQuery 选择继续使用 IE 的 ActiveX 对象 IXMLHttpRequest,而不是在 IE7 中添加的原生 XMLHttpRequest 支持(代码 cmets 表明 IE7 实现存在问题——参见 v1.3.2,第 3378 行)。像 XMLHttpRequest 这样的本机浏览器对象支持 JavaScript“expando”属性,但 ActiveX 对象不支持。无论如何,IE6(诅咒它)没有原生 XMLHttpRequest 支持,所以你最好不要将 expando 属性分配给 Request 对象,以防万一你仍然有任何 IE6 用户。
    • @richardtallent:这可能应该是一个答案。我正要写一些非常相似的东西。
    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2015-05-18
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多