另一个运行一个ajax

时间:2012-05-18 21:08:01

标签: javascript ajax

我正在研究我(遗憾地)不能使用jQuery的项目。我需要做一些简单的jQuery,但我不能用纯JavaScript做。所以,我需要使用另一个响应来运行一个ajax请求。在jQuery中它看起来像:

$.get("date.php", "", function(data) {
  var date=data;
  $("#date").load("doku.php?id="+date.replace(" ", "_")+" #to_display", function() {
    $(document.createElement("strong")).html("<a href=\"doku.php?id="+date.replace(" ", "_")+"\">"+date+"</a>:").prependTo($(this));
  });

});

这是我在纯JS中无法正常工作的代码:

  if (window.XMLHttpRequest) 
  { 
     ObiektXMLHttp = new XMLHttpRequest();
  } else if (window.ActiveXObject) 
  { 
     ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } 

  if(ObiektXMLHttp) 
  {
    ObiektXMLHttp.open("GET", "date.php");

    ObiektXMLHttp.onreadystatechange = function() 
    {

      if (ObiektXMLHttp.readyState == 4)
      {
        var date = ObiektXMLHttp.responseText;
        if (window.XMLHttpRequest) 
        { 
           ObiektXMLHttp = new XMLHttpRequest();
        } else if (window.ActiveXObject) 
        { 
           ObiektXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 

        ObiektXMLHttp.open("GET", "doku.php?id="+date.replace(" ", "_"));
        ObiektXMLHttp.onreadystatechange = function() 
        {
          if (ObiektXMLHttp.readyState == 4)
          {
            alert(ObiektXMLHttp.responseText);
          }
        }
      } 
   } 
   ObiektXMLHttp.send(null);
  }

我在做什么?

3 个答案:

答案 0 :(得分:1)

您忘记在第二个案例中致电ObiektXMLHttp.send(null);

//....
ObiektXMLHttp.open("GET", "doku.php?id="+date.replace(" ", "_"));
ObiektXMLHttp.onreadystatechange = function() {
   if (ObiektXMLHttp.readyState == 4)
   {
      alert(ObiektXMLHttp.responseText);
   }
};
//Here
ObiektXMLHttp.send(null);

答案 1 :(得分:1)

这样的事情(天真的原型):

// xhr object def
var xhr = {
  obj: function() {
    if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
    throw new Error("can't init xhr object");
  },
  get: function(url, fn) {
    var xhr = this.obj();
    xhr.onreadystatechange = function() {
      if (xhr.readyState == 4) {
        fn(xhr.responseText);
      } 
    };
    xhr.open("GET", url);
    xhr.send(null);
  }
};

// implementation
xhr.get("date.php", function(data){
  xhr.get("doku.php?id=" + data.replace(" ", "_"), function(data){
    alert(data);
  });
});

答案 2 :(得分:0)

目前还不清楚你错了什么(你能告诉我们吗?),但我建议依靠这样的辅助功能:

function xhrGet(url, callback) {
    if (window.XMLHttpRequest)
        var xhr = new XMLHttpRequest();
    else if (window.ActiveXObject)
        var xhr = new ActiveXObject("Microsoft.XMLHTTP");
    if (!xhr) return;
    xhr.open("GET", url);
    xhr.onreadystatechange = function() {
        if (xhr.readyState !== 4) return;
        if (typeof callback === "function") callback(xhr);
    };
    xhr.send(null);
    return xhr;
}

所以你要做的就是使用这个功能:

xhrGet("date.php", function(x1) {
    xhrGet("doku.php?id=" + date.replace(" ", "_"), function(x2) {
        // do stuff
        // x1 and x2 are respectively the XHR object of the two requests
    });
});