Возвращаемое значение вызова $ .post () - PullRequest
1 голос
/ 16 декабря 2011

У меня есть функция jquery $ .post, например:

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

эта функция фактически используется при проверке ... Так что возвращаемое значение (данные) содержит true или false. Но это значение не сохраняется в переменной 'result'. Я понимаю, что это потому, что пост делает асинхронный вызов и, следовательно, он не ждет ответа. Я хочу спросить, есть ли какое-то решение для этого? или этот вызов можно сделать как-то синхронным ??

Ответы [ 2 ]

4 голосов
/ 16 декабря 2011

Это считается плохой практикой, но в $.ajax() есть параметр async, который можно установить на 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
    }
}
2 голосов
/ 16 декабря 2011

Проверка правильности внутри обратного вызова

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