2014-01-22 70 views
0

我想解決的問題,分配從getJSON()功能返回的變量的值,getJSON()已完成。如何訪問分配給變量的`done()`函數的返回值?

我認爲以下解決時間問題,但我遇到了另一個問題,它是從done()函數返回值並將其分配給一個變量。

var fn1 = $.getJSON("/path", function(){ 
}); 

var h = fn1.done(function (results) { 
console.log(results.a_key); // this logs the desired value 
console.log(jQuery.type(results.a_key)); // this logs 'string' 
return results.a_key; 
}); 

alert(h); // alerts [object Object] 

如何訪問分配給變量的done()函數的返回值?

這不是一個計時問題,它是關於如何訪問返回的值。

如果以上是錯誤的方法,有人可以證明他們如何解決問題並將結果分配給函數外的變量嗎?

+0

你不能返回一個值,這樣的...因爲它是異步處理依賴於Ajax請求的結果,所有的代碼應該是處理 –

+0

可能重複內[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

+0

@ArunPJohny我以前問過在這裏被標記爲該問題的重複的問題(http://stackoverflow.com/questions/21238939/how-to-assign-the-return-value-of-a-function-containing-getjson-to-a - 變量),我相信上面的解決方案t他計時問題,但我仍然不知道如何將返回的值分配給一個變量。 – user1063287

回答

0

解決方案

這爲我工作在一個解決方案我場景。

而是這種模式:

  • function_1返回結果異步
  • a =在這裏function_2

function_1

  • 使用a結果我切換到:

    • a = function_1
    • 使用b在這裏function_2

    function_1

  • function_1完成
  • b =結果所以function_1.done()功能成爲一個容器function_2

    例子:

    // here is the function that you are waiting on results from 
    var myGetJsonFunction = $.getJSON("/path", function(){ 
    }); 
    // the following is activated once the above function has run 
    myGetJsonFunction.done(function (results) { 
    var variableFromResults = results.a_key; 
    // use variableFromResults in a function here 
    }); 
    
    // call the 'container' function here 
    $(document).on("click",".form_submit", function (e) { 
    e.preventDefault(); 
    myGetJsonFunction(); 
    }); 
    
  • 0

    done返回一個jQuery Deferred object - 它不是一個返回值。

    由於deferred.done()返回延遲對象,遞延對象的其它方法可以被鏈接到這個人,包括附加.done()方法。

    (所顯示的值是「[對象的對象]」,因爲這是一個延遲對象的[[的ToString]。)

    一旦開始使用承諾(或其它異步回調),你是卡住了 - 但這很好,繼續!

    // A done() call always returns the same deferred object (fn1 in this case) 
    // so don't `return` from it. 
    fn1.done(function (results) { 
        console.log(results.a_key); // this logs the desired value 
        console.log(jQuery.type(results.a_key)); // this logs 'string' 
    
        // Do stuff with results here INSIDE the callback 
        // (Could also attach an additional `done` or use `then` as appropriate) 
        alert(results.a_key)  
    }); 
    
    // Code down here is [likely] run before the done callback runs 
    // as the callback is "asynchronous". 
    

    (承諾/ A和jQuery遞延對象真正成爲樂趣,當與then和更復雜的異步執行中使用流。)

    相關問題