0

私は(悲しいことに)jQueryを使用できないプロジェクトに取り組んでいます。そして、jQuery で簡単なことをする必要がありますが、純粋な JavaScript ではできません。したがって、別の応答フォームを使用して、1 つの 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);
  }

私は何をしているのですか?

4

3 に答える 3

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);
  });
});
于 2012-05-18T21:19:37.093 に答える
1

2番目のケースで呼び出すのを忘れました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);
于 2012-05-18T21:15:55.363 に答える
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
    });
});
于 2012-05-18T21:16:21.557 に答える