微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 在我打开Developer工具之前,IE还没有加载XML内容?

我有一个页面,使用jQuery AJAX get请求从XML文件加载产品信息.这适用于FF和Chrome,但内容不会在IE中加载.但是,它会在打开开发人员窗口并刷新页面后加载数据!有谁知道为什么?

这是我的jQuery AJAX请求:

//Load the xml file
$.ajax({
    type: "GET",
    url: "xml/" + cat + ".xml",
    dataType: ($.browser.msie) ? "text" : "xml",
    success: function(data) {
      alert('xml successfully loaded');
      var xml;
      if (typeof data == "string") {
        xml = new ActiveXObject("Microsoft.XMLDOM");
        xml.async = false;
        xml.loadXML(data);
      } else {
        xml = data;
      }
        //Get total number of products in the category
        $(xml).find('daTaroot').each(function() {
            var pTemp = $(this).attr('count');
            catName = $(this).attr('catTitle');
            console.log(catName);
            pTotal = Number(pTemp);
        });

         //Fill the correct entries onto the page
         while (count<=pTotal) {
              $(xml).find('product').each(function() {
                  if (count>lCounter && count<hCounter) {
                      var pName = $(this).find('ProductName').text();
                      var pImage = $(this).find('Photo').text();
                      var pCode = $(this).find('ProductCode').text();
                      var pDesc = $(this).find('WebDescription').text();
                      if (cat.substring(0,2)=='cs') {
                          var pPrice = $(this).find('PartyShackPrice').text();
                      } else { var pPrice = $(this).find('RRP').text(); }
                      var pSize = $(this).find('size').text();
                      var pLink = '<a href="item.html?'+cat+'-'+pCode+'">';

                      var pHTML = '<div id="'+pCode+'" class="Box">';
                      pHTML += pLink + '<img src="images/SMALL_IMAGE/' + pImage + '" width="70" height"100" /></a>';
                      pHTML += '<div class="BoxText">';
                      pHTML += pLink + '<div class="BoxTitle">'+pName+'</div></a>';
                      pHTML += '<div class="BoxDesc">'+pDesc+'</div>';
                      if (pSize !== 'Not Applicable') { pHTML += '<div class="BoxSize">'+pSize+'</div>'; }
                      pHTML += '<div class="BoxPrice">£'+pPrice+'</div>';
                      pHTML += pLink + '<div class="BoxBuy"></div></a>';
                      pHTML += '</div></div>';

                      $("#products").append(pHTML);
                  }
                  count +=1;
              });
         }

        //Work out the total number of pages the product list is split up into
        if (pTotal%50==0) { pagetotal = pTotal/50; } 
        else { pagetotal = Math.floor(pTotal/50) + 1; }
        console.log('pagetotal - ' + pagetotal);


        //Show path of the current page
        getPath(cat, catName, 0);

        //Depending on page number show prevIoUs and next buttons and display product counter
        if (pagetotal==1) { //page 1 and only one page
            $("#prev").css("visibility", "hidden");
            $("#next").css("visibility", "hidden");
            $("#counter").append('1 - ' + pTotal + ' of ' + pTotal);
        } else if ((pageNum==1) && (pagetotal!=1)) { //page 1 and multiple pages
            $("#prev").css("visibility", "hidden");
            $("#next").append('<a href="products.html?'+cat+'-'+(pageNum+1)+'">Next &gt;&gt;</a>');
            $("#counter").append('1 - 50 of ' + pTotal);
        } else if ((pageNum==pagetotal) && (pagetotal!=1)) { //last page when theres more than 1 page 
            $("#next").css("visibility", "hidden");
            $("#prev").append('<a href="products.html?'+cat+'-'+(pageNum-1)+'">&lt;&lt; PrevIoUs</a>');
            $("#counter").append((((pageNum-1)*50)+1) + ' - ' + pTotal + ' of ' + pTotal);
        } else { // a middle page
            $("#next").append('<a href="products.html?'+cat+'-'+(pageNum+1)+'">Next &gt;&gt;</a>');
            $("#prev").append('<a href="products.html?'+cat+'-'+(pageNum-1)+'">&lt;&lt; PrevIoUs</a>');
            $("#counter").append((((pageNum-1)*50)+1) + ' - ' + (pageNum * 50) + ' of ' + pTotal);
        }

        //display page number
        $("#currentPage").append(' ' + pageNum + ' of ' + pagetotal);
    },
    error: function() { alert('failure'); }
});
});

IE也应该调用成功警报或错误警报,但是在打开开发人员窗口并刷新页面之前它不会.

谢谢

解决方法:

我只是在SO主页上阅读你问题的标题,我知道问题是什么.阅读问题中的代码证实了这一点.你遇到的问题是line console.log(catName);

IE(和其他一些浏览器)在打开开发人员窗口之前不会初始化控制台对象.

在此之前,尝试使用控制台将返回undefined,并将导致您的脚本停止运行.

这里的第一课不是在完成后将调试代码留在程序中.只有在您测试程序时才应该调用控制台;当你完成它们之后,把它们拿出来.

第二个教训是,如果您确实需要在代码中进行控制台调用,则应将它们包装在代码中,以便在尝试使用控制台之前检查控制台是否存在.有很多方法可以做到这一点,从简单的if(console){console.log(…);}一直到编写自己的调试类.你是如何做到的,取决于你,但通常以这种方式编写所有控制台代码是个好主意,即使你只是做了一些调试,也要避免你在这里遇到的那种问题.

希望有所帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐