jQuery AJAX requests failing in IE8 with message 'Error: This method cannot be called until the open method has been called.'

别等时光非礼了梦想. 提交于 2019-12-05 08:13:20

Alright, here's the fix! The request was using window.XMLHttpRequest(), which isn't working properly in IE8 for some reason. jQuery is not failing back to window.ActiveXObject("Microsoft.XMLHTTP") as it should.

Add this to your script somewhere before your AJAX call (only verified in IE8, not other IE's):

jQuery.ajaxSetup({
            xhr: function() {
                    //return new window.XMLHttpRequest();
                    try{
                        if(window.ActiveXObject)
                            return new window.ActiveXObject("Microsoft.XMLHTTP");
                    } catch(e) { }

                    return new window.XMLHttpRequest();
                }
        });

Here's how I came to the solution:

  1. Updated to jQuery 1.4.4 in case the issue was a bug that had been fixed.
  2. Stepped through Firebug debugger and DevTools debugger until the results seemed to be drastically different.
  3. On line 5899, the ajax() function creates the XmlHttpRequest object with the xhr() function. In Firefox, it was returning good data. In IE, this was returning with all fields being Error: This method cannot be called until the open method has been called.
  4. I analyzed this function on line 5749, return new window.XMLHttpRequest();
  5. I googled and came across this page that has the same problem and suggested the solution that works for me.
  6. Official jQuery ticket:
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!