如何在javascript中将AJAX函数内的值返回给parent?

Jav*_*eva 0 javascript ajax jquery

我试图根据其中的AJAX函数的响应将函数返回true或false,但我不知道该怎么做.

(function($) {
    $('#example').ajaxForm({
        beforeSubmit : function(arr, $form, options) {

            var jsonStuff = JSON.stringify({ stuff: 'test' });

            $.post('/echo/json/', { json: jsonStuff }, function(resp) {

                if (resp.stuff !== $('#test').val()) {
                     // Cancel form submittion
                     alert('Need to type "test"');
                     return false; // This doesn't work          
                }

            }, 'json');

        },
        success : function() {
             alert('Form sent!');   
        }
    });   
})(jQuery);?
Run Code Online (Sandbox Code Playgroud)

我做了一个小提琴来更好地说明这一点:

http://jsfiddle.net/vengiss/3W5qe/

我正在使用jQuery和Malsup的Ajax Form插件,但我相信这个行为与插件无关,我只需要根据请求return false来处理beforeSubmit函数,POST这样每次都不会提交表单.有人能指出我正确的方向吗?

提前致谢!

Jar*_*Par 6

处理异步函数时,这是不可能的.调用的函数post将立即返回,而ajax回调将在将来的某个时刻返回.不可能从现在返回未来的结果.

相反,您需要做的是将回调传递给原始函数.最终将使用ajax调用的结果调用此函数

var makePostCall = function(callback) {
  $.post('/echo/json/', { json: jsonStuff }, function(resp) {
    if (resp.stuff !== $('#test').val()) { 
      // Cancel form submittion
      alert('Need to type "test"');
      callback(false);
    } else { 
      callback(true);
    }}, 'json');
};
Run Code Online (Sandbox Code Playgroud)

然后将期望快速响应的代码切换makePostCall为使用回调.

// Synchronous version 
if (makePostCall()) { 
  // True code 
} else {
  // false code
}

// Async version
makePostCall(function (result) {
  if (result) {
    // True code
  } else {
    // False code
  }
});
Run Code Online (Sandbox Code Playgroud)