XJAX重用XMLHttp对象

时间:2014-02-25 20:51:44

标签: php ajax xmlhttprequest

所以我在尝试重用XMLHttp请求对象时遇到了问题。我正在尝试将AJAX纳入网站!

请参阅下面的代码:

var XMLHttp = createXMLHttpRequestObject();
function createXMLHttpRequestObject() {
  var xmlHTTP;

  //First to deal with Internet Explorer >:(
  if (window.ActiveXObject){
    try {
      xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    catch (e) {
      xmlHTTP = false;
    }
  } else {
    try {
      xmlHTTP = new XMLHttpRequest();
    }
    catch (e) {
      xmlHTTP = false;
    }
  }

  if (!xmlHTTP)
    alert("Oops! Someone just unplugged the internet!");
  else
    return xmlHTTP;

}// XMLHttpRequest

function getAboutMe() {
  if (XMLHttp.readyState == 0 || XMLHttp.readyState == 4) {
    XMLHttp.open("GET", "http://repairiphonesuk.com/rachael/AJAX/getAboutMe.php", true);
    XMLHttp.onreadystatechange = handleServerResponse('AboutMe');
    XMLHttp.send();
  } else {
    setTimeout(getAboutMe(), 1000);
    alert("no");
  }
}

function getHome() {
  if (XMLHttp.readyState == 0 || XMLHttp.readyState == 4) {
    XMLHttp.open("GET", "http://repairiphonesuk.com/rachael/AJAX/getHome.php", true);
    XMLHttp.onreadystatechange = handleServerResponse('home');
    XMLHttp.send();
  } else {
    setTimeout(getHome(), 1000);
    alert("no");
  }
}


function handleServerResponse(from) {
  if (XMLHttp.readyState == 4 && XMLHttp.status == 200) {
    document.getElementById("displayContent").innerHTML = XMLHttp.responseText;
    if (from === 'home') {
      document.getElementById('displayContent').style.backgroundColor=transparent;
    }
  } else if (XMLHttp.status = 404) {
  }
}

getHome()函数和参数删除到句柄请求时,它可以正常工作!我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

onreadystatechange接受一个函数赋值,你正在做的是调用一个函数并将返回值分配给onreadystatechange。通过将代码包装在匿名函数中来解决此问题。

XMLHttp.onreadystatechange = function (){handleServerResponse('home')};

setTimeout将一个函数作为第一个参数,你正在做的是调用函数,与onreadystatechange基本相同,因为getHome没有接受任何参数只是通过了功能本身

setTimeout(getHome, 1000);