提取responseJSON对象

时间:2014-03-10 14:09:33

标签: javascript ajax json

我对ajax和Javascript相当新 我有这个代码

duration_reco = $.ajax({
    url : newurl, 
    dataType : 'json'
}).done(function (obj) {});

console.log(duration_reco);

我得到的输出是http://grab.by/v0lc 我对responseJSON(快照中的最后一个对象)感兴趣。我已经尝试过duration_reco.responsejSON,但它不起作用。我怎样才能得到线索。

修改

只需提供更多代码,以便您可以提供更好的帮助

for(var i=1;i<=10;i++) 
{   
    duration_reco = $.ajax({
        url : newurl, 
        dataType : 'json'
    }).done(function (obj) {
        console.log(obj.data.duration); 
        //console.log(duration_reco.responseJSON());
        data[i - 1] = {
            "duration" : obj.data.duration
         };
     });
}

我试图做这样的事情,但似乎既没有'我'也没有'数据'可以在里面访问。我的其他选择是什么?

3 个答案:

答案 0 :(得分:1)

您的Ajax请求是异步完成的,而您的代码是以线性方式执行的。您需要在回调函数中记录输出。

var duration_reco = {};

$.ajax({
    url : newurl, 
    dataType : 'json'
}).done(function (obj) {
  duration_reco = obj;
  console.log(duration_reco);
});

答案 1 :(得分:0)

您可以在.done函数中访问obj作为参数。

}).done(function (obj) {
    //console.log(obj); //your response
});

答案 2 :(得分:0)

在这个问题的评论中,您已经说过“我想让它同步”和“我可以在外面访问它”之类的内容。您遇到了学习者在使用异步代码时会遇到的一个非常常见的问题。你很生气,因为你想写这样的代码:

  1. 设置通话
  2. 拨打电话
  3. 处理结果
  4. 您觉得异步请求只会妨碍您。不要这样!不要感到沮丧:了解问题然后变得平坦。这是一个可以帮助您tame asynchronous code的优秀资源的链接。

    编辑:使用您提供的示例代码,我精心设计了一个如何使用promises设置这一切的最小示例。查看working fiddle

    // global variables: find a better way!
    var data = [];
    var count = 0;
    
    // a function that returns a promise can be "waited for"
    var many_requests = function () {
        var promise = $.Deferred();
    
        for(var i = 0; i < 10; i++) {   
            make_one_request(i, promise);
        }
    
        return promise; // "I promise one day I'll be an array of responses"
    };
    
    var make_one_request = function (index, promise) {
    
        $.ajax({
            url : '/echo/json/', 
            dataType : 'json',
            method: 'post', // <---- I'm making a POST because this is a fiddle
                            //       you will still use a GET
            data: {}, // <-- your data here
            success: function (response) {
                // these will run out of order, but your array will be ordered
                data[index] = response;
                console.log(index);
    
                // if the time has come, resolve the promise
                count++;
                if (count == 10) {
                    promise.resolve(data); // OK! I'm an array of responses now!
                }
            }
        });
    };
    
    // I will wait until I have an array of response data
    $.when(many_requests()).then( function (data) {
    
        // woo!
        console.log(data); 
    });
    

    特别要注意成功函数中的console.log语句。结果无序返回,但您的数组仍按正确顺序编制索引。 then函数的回调只有在many_requests返回的承诺得到解决后才会运行。

    也许这对你有用,也许不会,但真正重要的是:当你遇到一种新的编程,一种新模式,或一种新技术......不要试图逃跑躲在你原来的范例里!拥抱新的和有趣的东西,尽可能多地学习,然后选择你最喜欢的技术并将它们放在工具带中。