Javascript 对象返回需要等待JSON请求完成
下面是get.json的内容: {“id”:1,“name”:“hello”} 以及脚本/标记: var分录=[]Javascript 对象返回需要等待JSON请求完成,javascript,jquery,json,oop,object,Javascript,Jquery,Json,Oop,Object,下面是get.json的内容: {“id”:1,“name”:“hello”} 以及脚本/标记: var分录=[] function Data(){} Data.prototype.get = function(id){ var object = {}, length = entries.length, success = false; for (var i = 0; i < length; i++) {
function Data(){}
Data.prototype.get = function(id){
var object = {}, length = entries.length, success = false;
for (var i = 0; i < length; i++) {
if (entries[i].id == id) {
object = entries[i];
i = length;
console.log("From browser: " + object.name);
success = true;
}
}
if (!success) {
$.getJSON("get.json", function(data){
entries.push(data);
object = data;
console.log("Newly fetched: " + object.name);
});
}
return object;
}
$(function(){
var data = new Data();
data.get(1);
console.log((data.get(1).name);
});
函数数据(){}
Data.prototype.get=函数(id){
var object={},length=entries.length,success=false;
对于(变量i=0;i
我会使用回调。如果浏览器缓存中存在数据,则会立即触发回调。如果不存在,则会在异步请求完成时触发回调
function Data(){}
Data.prototype.get = function(id, callback){
var object = {}, length = entries.length, false;
for (var i = 0; i < length; i++) {
if (entries[i].id == id) {
object = entries[i];
console.log("From browser: " + object.name);
callback(object);
return; // Don't let execution continue
}
}
$.getJSON("get.json", function(data){
entries.push(data);
object = data;
console.log("Newly fetched: " + object.name);
callback(object);
});
}
$(function(){
var data = new Data();
data.get(1, function(obj){
console.log(obj.name);
});
});
函数数据(){}
Data.prototype.get=函数(id,回调){
var object={},length=entries.length,false;
对于(变量i=0;i
另一种方法是使AJAX调用同步,这将暂停所有执行,但这是一个非常坏的主意
编辑:我还稍微更改了您的代码,删除了
success
变量,并选择从for
循环返回(从而打破循环)。没问题。异步思考是思维的一个主要转变。每次我在使用它的项目上工作时,我都必须停下来思考一下!