【发布时间】:2014-11-08 04:54:22
【问题描述】:
我正处于最大的挫折中,试图解决我的心理障碍:回调。我读过How to return value from an asynchronous callback function? 和How to return the response from an Ajax call?(在许多其他帖子中),确实后者有助于解决另一个问题。但是,我现在尝试做的只是略有不同,我正在失去理智试图使其适应我的代码。也许我的方法完全错误/存在根本缺陷(不仅仅是不成熟,我可以忍受)?
我的问题的本质是,不是简单地将ajax结果返回给回调函数,而是需要生成的json可用于不同的函数,对应于不同的事件,即:
linkOne.onclick = 调用 ajaxReq + getJsonData,然后以 getJsonData 结果作为参数调用 functionOne linkTwo.onclick = 调用 ajaxReq + getJsonData,然后以 getJsonData 结果作为参数调用 functionTwo linkThree.onclick = 调用 ajaxReq + getJsonData,然后以 getJsonData 结果作为参数调用 functionThree
这不能用 link.onclick 定义来完成吗?为什么这不起作用:
linkThree.onclick = functionOne(getJsonData);
这是我的代码:
function ajaxReq() {
var request = new XMLHttpRequest();
return request;
}
function getJsonData() {
var request = ajaxReq();
request.open("GET", "/myJSON.json", true);
request.setRequestHeader("content-type", "application/json");
request.send(null);
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
var myJsonString = JSON.parse(request.responseText);
var myJsonArray = myJsonString["An Array in myJSON.json"];
// functionOne(myJsonArray); // callback: what if I need to pass this value to various functions?
return myJsonArray; // ... 'cause this ain't doin' it, and I don't know why
}
}
} // onreadystatechange
} // getJsonData
function functionOne(myJsonArray) {
var myJsonArray = getJsonData(); // why doesn't this work, since, in getJsonData, var request = ajaxReq(); returns an ajax request ?
}
为什么,如果 var request = ajaxReq();调用 ajaxReq 函数并将其结果返回给 getJsonData,是否 var myJsonArray = getJsonData();在functionOne中不一样吗?
对此的任何帮助都非常感谢。 (ps 寻求纯 JavaScript 修复,而不是 jQuery。)
svs
【问题讨论】:
标签: javascript ajax callback