Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ajax调用中返回值?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何在ajax调用中返回值?

Javascript 如何在ajax调用中返回值?,javascript,jquery,ajax,Javascript,Jquery,Ajax,如果数据为0,我想在输入中输入keyup后返回false,如果不是false,返回为true。但在我的try中,如果数据===0,则始终返回为真: $('input').live('keyup change', function () { var result = true; $.ajax({ type: 'POST', dataType: 'json', url: 'search_customer', data:

如果数据为
0,我想在输入中输入
keyup
后返回false,如果不是false,返回为true。但在我的try中,如果
数据===0,则始终返回为真:

$('input').live('keyup change', function () {
    var result = true;
    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: 'search_customer',
        data: dataObj,
        cache: false,
        success: function (data) {
            if (data == 0) {
                alert('data is 0')
                result = false;
            } else {
                alert('data is not 0')
            }
        }
    })
    //alert(result) this output  always is 'true'
    return result;
})
.ajax()
调用在将来的任意时间返回。
keyup
change
处理程序立即返回(基本上)

success
处理程序中完成工作。或者,您可以将一个全局(或名称空间的全局)设置为返回的值,但要知道在Ajax调用完成之前它是无效的

如果
if
语句本身没有达到预期效果,您还需要确保返回的数据是您预期的数据。这与事件处理程序的返回值不同。

调用
.ajax()
会在将来的任意时间返回。
keyup
change
处理程序立即返回(基本上)

success
处理程序中完成工作。或者,您可以将一个全局(或名称空间的全局)设置为返回的值,但要知道在Ajax调用完成之前它是无效的


如果
if
语句本身没有达到预期效果,您还需要确保返回的数据是您预期的数据。这与事件处理程序的返回值不同。

我看到您选择了async:false作为答案,但有一种更好的方法-使用回调函数

$('input').live('keyup change', function () {

  DoSomething(function(result) {
   // this isn't blocking
  });    

})

function DoSomething(callback) {

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: 'search_customer',
        data: dataObj,
        cache: false,
        success: function (data) {

          var result = data !== 0;

          if (typeof callback === 'function') {   
            callback(result); 
          }    

        }
    });

}

我看到您选择了async:false作为答案,但有一种更好的方法——使用回调函数

$('input').live('keyup change', function () {

  DoSomething(function(result) {
   // this isn't blocking
  });    

})

function DoSomething(callback) {

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: 'search_customer',
        data: dataObj,
        cache: false,
        success: function (data) {

          var result = data !== 0;

          if (typeof callback === 'function') {   
            callback(result); 
          }    

        }
    });

}

添加以下内容:
success:function(data){alert(data);
并告诉我们resultalert(result)将始终返回true,因为.ajax()是异步的。为什么要在此处返回某些内容。它有什么用途?返回值不会在任何地方处理。如果要处理数据,则可以从
success
函数中直接调用处理程序……添加以下内容:
success:function(data){alert(data);
并告诉我们resultalert(result)将始终返回true,因为.ajax()是异步的。为什么要在此处返回某些内容。它有什么用途?返回值不会在任何地方处理。如果要处理数据,则可以从
success
函数中直接调用处理程序……这与在success函数中写入数据处理程序不一样吗?这只会调用在成功时执行另一个调用的函数。
这不是阻塞
意味着什么?我无法正确理解。以前接受的答案(已删除)建议使用async:false,它会阻止其他请求。我的答案是响应该建议。当然,如果有意义的话,您可以在这个函数中编写处理程序。这是一个更模块化的过程。这与在success函数中编写数据处理程序不一样吗?这将只调用执行另一个函数的函数er呼叫成功。
这不是阻塞
意味着什么?我无法正确理解。以前接受的答案(已删除)建议使用async:false,它会阻止其他请求。我的答案是响应该建议。当然,如果有意义,您可以在该函数中编写处理程序。这是一个更模块化的方法。