我想将成功的AJAX响应传递给一个javascript变量,基本上是在内容加载之后,我最终可能会在其他函数中使用它。我有这个代码有效:
var json; // Variable with Global Scope
$.ajax({
type: "GET",
url: "http://127.0.0.1:8888/...",
dataType: "JSON",
async: false,
success: function (response) {
json = JSON.parse(response.value1); // value1 as in {"value1":1234} from the url.
console.log("Json Parse Data 1: " + json);
}
});
console.log("Json Parse Data 2: " + json);
根据我的研究,不推荐使用async: false
,因为它会冻结浏览器加载,直到AJAX请求完成。因此,替代方案如下:
function getValue(callback){
var json;
$.ajax({
type: "GET",
url: "http://127.0.0.1:8888/...",
dataType: "JSON",
success: function (response) {
var json = JSON.parse(response.value1);
console.log("Json Parse Data 1: " + json);
callback(json);
}
});
}
function on_Complete(json) { // When request is complete, do this
console.log("Json Parse Data 2: " + json);
}
getValue(on_Complete); // Here I call the second function to do console.log("Json Parse Data 2: " + json)
这非常接近,但我想用第二个代码实现的是将var json;
作为回调传递,并在请求成功后将其值返回给第二个函数而不是console.log("Json Parse Data 2: " + json)
。有些人认为:
function on_Complete(json) {
var result = json;
return result; // Or directly return json;
}
var value1 = getValue(on_Complete); // Making this variable equal to json returned in on_Complete(json)
console.log("Json Parse Data 2: " + value1);
我错过了什么?