2011-12-16 40 views
1

返回值我有一個jQuery $。員額功能LIK這樣:

$.post('/test',json_data, function(data) { 
           result=data 
}); 

這個功能實際上是被以驗證它的返回值(數據)使用...所以包含真或假。但是這個值沒有被存儲在變量'result'中。據我所知,這是因爲post進行異步調用,因此它不會等待響應。我想問的是,有沒有解決方法?或者這個調用可以以某種方式同步?

+0

它是異步的,你需要檢查回調函數內部的響應 - 在`result = data`之後進行檢查。 – 2011-12-16 09:27:26

回答

4

這被認爲是不好的做法,但有一個async參數$.ajax(),你可以設置爲false和同步等待結果:

var result; 
$.ajax({ 
    type: 'POST', 
    url: '/test', 
    data: json_data, 
    async: false, 
    success: function(data) { 
    result=data; 
    }, 
    dataType: 'application/json' 
}); 
//result available here 

更地道,但在這種情況下稍微不太方便,是採取回調的優勢:

function validate(okCallback, errorCallback) { 
    $.post('/test',json_data, function(data) { 
     if(data) { 
      okCallback(); 
     } else { 
      errorCallback(); 
     } 
    }); 
} 

validate(
    function() { 
     //proceed 
    }, 
    function() { 
     //display validation error 
    } 
} 
+0

Thakyou爲您的答案...但似乎我將不得不使用回調方法畢竟。我嘗試了一些方法,但無濟於事......你能幫我解決我描述的問題[這裏](http://stackoverflow.com/questions/8542224/validation-after-ajax-call)。或者至少告訴我,我使用的方法是否可以......我有這種嘮叨的感覺,可能有比我所描述的更好的方法來做到這一點。 – Adnan 2011-12-19 15:24:31

2

的合法性進行檢查回調內部

$.post('/test',json_data, function(data) { 
    var result=data; 
    if(result === true) { 
     // do some ok processing... 
     } else { 
     // do not ok processing... 
     } 
});