多个请求AJAX输出未在IE中呈现

时间:2014-04-29 12:25:22

标签: javascript ajax internet-explorer

以下(缩短的)代码的工作方式类似于输入框上的自动完成,在输入框下方的div中输出结果。

它在Chrome / Firefox中完美运行(即搜索“Eggs”,然后“Milk”显示其结果),但是在IE中它使第一个请求很好,但它不会输出任何进一步的请求。 / p>

网络显示IE正在向服务器发出后续请求(200个头代码),但它不会对它做任何事情。

编辑:我不能使用jQuery。但可以使用YUI3(平台限制)

/* Setup Ajax */
function ajaxRequest(){var activexmodes=["Msxml2.XMLHTTP", Microsoft.XMLHTTP"],i;if(window.ActiveXObject){for(i=0; i<activexmodes.length; i++){try{return new ActiveXObject(activexmodes[i]);}catch(ignore){/*suppress error*/}}}else if (window.XMLHttpRequest){return new XMLHttpRequest();}else{return false;}}

/* Get Value of search */
var searchBoxObj = document.getElementById('searchBox-1'); 

/* The Ajax Request */
var theSearchValue;
var mygetrequest=new ajaxRequest();
mygetrequest.onreadystatechange=function(){
 if (mygetrequest.readyState==4){
  if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){
    var jsondata=JSON.parse(mygetrequest.responseText), /* retrieve result as an JavaScript object */
      searchData = jsondata.searches,
      i;
    if (searchData.length > 0){
      document.getElementById('result').className = "on";
      output='<ul id="searchResults">';
      for (i=0; i < searchData.length; i++){
        /* The Loop Code */
     }
     output+='</ul>';
   }
   else {
    document.getElementById('result').className = "";
   }

   document.getElementById("result").innerHTML = output;
  }
  else{
   /* alert("An error has occured making the request") */
  }
 }
};

/* With every key press */
var stoppedTyping;
searchBoxObj.onkeyup = function() {

    if (stoppedTyping) { clearTimeout(stoppedTyping);}
    stoppedTyping = setTimeout(function(){
      if (searchBoxObj.value.length > 2){
        theSearchValue = searchBoxObj.value;
        mygetrequest.open("GET", "/asp/lookup.asp?term="+theSearchValue, true);
        mygetrequest.send(null);
      }
    }, 200);
};

1 个答案:

答案 0 :(得分:0)

也许您可以尝试使用jquery来处理ajax请求和填充结果div。 因为它被设计为跨浏览器并且应该正确支持IE(版本2. * jquery将仅支持版本8的IE而版本1.9。*将支持版本6的IE) 代码可能看起来像这样:

$.ajax({
    type: "GET",
    url: your_url

})
    .done(function( data ) {
    var jsondata=JSON.parse(data);
    var searchData = jsondata.searches;
     if (searchData.length > 0){
      $('#result').attr("class","on"); //adding the class attr
      output='<ul id="searchResults">';
      for (var i=0; i < searchData.length; i++){
        /* The Loop Code */
     }
     output+='</ul>';
   }
   else {
    $('#result').attr("class","");
   }

$("#result").html(output); //filling the dom with your output string

})
.fail(function() {
    alert( "error" );
  })

请参阅jQuery文档:https://api.jquery.com/jQuery.ajax/