2012-05-18 2 views
0

Я работаю над проектом, где я (к сожалению) не могу использовать jQuery. И мне нужно сделать что-то, что просто в jQuery, но я не могу сделать это в чистом JavaScript. Итак, мне нужно запустить один запрос ajax, используя форму ответа другой. В JQuery будет выглядеть следующим образом:Запустите один ajax за другим

$.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); 
    } 

Что я worng делать?

+1

Определить «не работает». Вы получаете ошибки или не видите никакого эффекта от кода или что? –

+2

Я знаю, что это не в тему, но я хочу хотя бы упомянуть, что если ваша причина не использовать jQuery из-за конфликта с другой библиотекой, вы должны просмотреть jQuery.noConflict(), что делает это вполне возможным. –

ответ

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); 
+0

О, да, вы правы. Я совсем забыл об этом. Спасибо за помощь. – ghi

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 
    }); 
}); 
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); 
    }); 
});