我正在尝试val在下面的代码中为变量分配一个值:
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数据,因为您不知道何时该数据将变得可用-它是异步的。
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标签时-请在问自己的问题之前先搜索类似的问题。