gpt4 book ai didi

javascript - 如何将回调添加到 AJAX 变量赋值

转载 作者:行者123 更新时间:2023-11-30 10:50:03 24 4
gpt4 key购买 nike

我有一个变量 responce,它是通过 AJAX 函数 send() 分配的。当我做作业时...

responce = send();

response returns before send 确实给我返回一个undefined 我怎样才能添加一个回调来防止这种情况发生?

编辑:澄清我的问题..

它仍然返回undefined。我正在为变量分配函数 send 发送返回 onreadystatechange 但是当我的代码正在执行时.. 在 send() 可以返回之前响应返回为未定义。如何停止运行响应下的代码,直到响应已分配发送值?

编辑 2:

下面的代码是我的发送函数...

 function send(uri)
{
var xhr = new XMLHttpRequest();
xhr.open("POST",uri,true);
xhr.onreadystatechange = function (send){
if(xhr.readyState == 4){
return xhr.responseText;
}
}
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
xhr.send(null);
}

最佳答案

您以异步方式使用 Ajax,但您却将其视为同步方式。

异步调用开始执行其工作,同时执行初始发送调用后的其余代码。你变得不确定,因为代码没有返回任何东西。

如果您查看 XMLHttpRequest 对象,open 方法中的第三个参数是异步标志。

open("method", "URL"[, asyncFlag[, "userName"[, "password"]]])

将其设置为 true [默认为关闭] 将进行异步调用。将其设置为 false 将使其同步。

使用同步调用的问题是它会锁定用户的浏览器,直到调用返回。这意味着 gif 动画、浏览器计时器停止等等。如果服务器永远无法响应,用户将无能为力。

最好的解决方案是避免使用同步调用。使用回调继续代码执行流程。

因此,根据您的修改,我将使用基本解决方案修改我的回复

function send(uri, callback)
{
var xhr = new XMLHttpRequest();
xhr.open("POST",uri,true);
xhr.onreadystatechange = function (send){
if(xhr.readyState == 4){ //You really should check for status here because you can get 400, 500, etc
callback(xhr.responseText);
//return
}
}
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
xhr.send(null);
}



function myFunction(){

var myUrl = "foo.php";

//show a loading message or soemthing
var someDiv = document.getElementById("loadingMessage");
someDiv.style.display = "block";

//Second half of your function that handles what you returned.
function gotData( value ){
someDiv.style.display = "none";
alert(value);
}

send(myUrl, gotData);

}

如果你真的想做同步并且你不介意锁定用户的浏览器

function send(uri, callback)
{
var xhr = new XMLHttpRequest();
xhr.open("POST",uri,false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
xhr.send(null);
if(xhr.status==200){
return xhr.responseText;
}
else{
return null;
}
}

关于javascript - 如何将回调添加到 AJAX 变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6016171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com