一个接一个地运行 ajax
Run one ajax after another one
我正在做一个我(可悲地(无法使用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);
}
我在做什么?
您忘了在第二种情况下调用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);
像这样的事情怎么样(天真的原型(:
// 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);
});
});
目前还不清楚你做错了什么(你能告诉我们吗?(,但我建议依靠一些像这样的辅助函数:
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
});
});
相关文章:
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 一个ajax循环有两个输出错误innerHTML
- 另一个Ajax函数触发的Ajax函数不起作用
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- 为主题选项(部分)创建一个ajax处理的保存操作
- 如何在下一次 AJAX 调用中访问从一个 AJAX 调用返回的变量
- 使用 jquery.when 和 done 将值从一个 ajax 调用传递到另一个
- 嵌套另一个 Ajax 请求时,Ajax 响应处理中断
- 一个Ajax函数能产生另一个Ajax功能吗
- Ajax获取数据以获取另一个Ajax数据
- 我可以在React和Redux中发送一个AJAX调用,而不需要操作创建者和还原器吗
- 我正在尝试实现一个AJAX调用.我做错了什么
- 当一个ajax是SUCCESS时,下一个加载
- 每当表单输入字段发生更改时,都会发送一个ajax请求
- 在慢速网络上,上一个Ajax请求会被下一个取消
- 将ajax请求添加到上一个ajax请求所附加的元素中
- 在ajax html返回中调用ajax会阻止第一个ajax脚本进一步工作
- 从 for 循环内的 AJAX 链中的最后一个 AJAX 请求返回值
- 使用另一个 ajax 脚本更改页面内容后,AJAX 脚本不起作用
- 一个 ajax 处理程序或多个处理程序