Javascript 对象返回需要等待JSON请求完成

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++) {

下面是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++) {
                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
循环返回(从而打破循环)。

没问题。异步思考是思维的一个主要转变。每次我在使用它的项目上工作时,我都必须停下来思考一下!