当前位置: 首页 > 面试题库 >

从事件在AJAX中的onreadystatechange返回值

侯向文
2023-03-14
问题内容

我正在尝试val在下面的代码中为变量分配一个值:

var cmdValue = "/cmd/fetch?x=";
var val;
var returned_data;

function what(){
    val = update('#TAG#');
}


function update(tag) {
    var req1 = newXMLHttpRequest();
    req1.open("GET",cmdValue + tag, true);
    req1.send("");

    return req1.onreadystatechange= function () {
        if (req1.readyState == 4 && req1.status == 200) {
            returned_data = req1.responseText;
            return returned_data;
        }else{

        }
    };
}

我在Firebug中跟踪变量,结果发现该变量val被分配了功能。有没有办法让代码运行,然后将值赋给变量val


问题答案:

在异步编程中,您 不需要 return数据,因为您不知道何时该数据将变得可用-它是异步的。

进行异步编程的方法是使用事件和/或回调。

例:

var cmdValue = "/cmd/fetch?x=";
var val;
var returned_data;
var performSomeAction = function(returned_data) {
    val = returned_data;
}

function what(){
    update('#TAG#',performSomeAction);
}



function update(tag,callback) {
    var req1 = newXMLHttpRequest();
    req1.open("GET",cmdValue + tag, true);
    req1.send("");

    req1.onreadystatechange= function () {
        if (req1.readyState == 4 && req1.status == 200) {
            returned_data = req1.responseText;
            //fire your callback function
            callback.apply(this,[returned_data]);
        }else{

        }
    };
}

这个问题是SO上最常见的问题之一,至少在涉及javascript标签时-请在问自己的问题之前先搜索类似的问题。



 类似资料:
  • onreadystatechange 事件 当请求被发送到服务器时,我们需要执行一些基于响应的任务。 每当 readyState 改变时,就会触发 onreadystatechange 事件。 readyState 属性存有 XMLHttpRequest 的状态信息。 下面是 XMLHttpRequest 对象的三个重要的属性: 属性 描述 onreadystatechange 存储函数(或函数名

  • 问题内容: 我将ajax技术与php结合使用,我想知道如何从onreadstatechange调用的函数中获取返回变量。 一个Java函数称为onsubmit,然后调用一个php脚本来验证数据库中的某些内容,并根据结果返回true或false。 这是我遇到问题的地方,我希望onsubmit =“ return snappyajaxfunction()”根据php的结果返回false或true。 我

  • 问题内容: 将参数传递到匿名onreadystatechange回调的普通纯JavaScript(即非JQuery)方法是什么? 例如: 问题答案: Javascript支持闭包,因此您编写的匿名函数将能够从封闭范围访问和访问。 如果要显式地执行此操作(例如,如果要在代码中的其他位置定义回调函数并重用它),则可以创建一个函数来创建回调。这也使您可以使用不同的名称(例如和)来对变量进行别名别名: 然

  • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

  • 问题内容: 我试图在我自己的函数中使用jQuery ajax调用的返回值,但它始终返回未定义的值。 ajax调用绝对有效,因为当我取消注释警报时,我得到了正确的返回,并且可以在firebug中看到它。我在做蠢事吗? 问题答案: AJAX调用是异步的-这意味着AJAX请求是按常规程序执行顺序发出的,并且在您的程序中这意味着不会将数据返回警报。 您不能以这种方式使用调用的返回值,而是将利用AJAX返回

  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电: