javascript - Ajax 调用完成成功后,才真正完成调用?

标签 javascript jquery ajax

我正在尝试找出一个ajax调用...我需要调用来保持并完成加载HTML内容,然后再一次(它是由keyup事件触发的)...否则返回的HTML实际上是加载多次。在我的例子中,ajax 调用返回 HTML,然后执行 JS 函数。但是当它被加载多次时,JS函数被执行两次=不好。

这是我的代码(警报框仅用于帮助...):

$(document).ready(function() {

   var isProcessing = false;

   $('#productSearchInput').keyup(function() {

   var productSearchInput = $(this).val();
   var dataString = 'searchInput='+ productSearchInput;
   var script_url = '../ajax/service-search.php';

    if(productSearchInput.length > 3 && isProcessing === false) {
        $.ajax({
        type: 'GET',
        url: script_url,
        data: dataString,
        beforeSend:     
            function() {    
            isProcessing = true;
                            alert('Processing input: ' + productSearchInput;
            },
        success:
            function(server_response)   {
            $('#searchresultdata').html(server_response).show('fast', function() { alert('Currently processing...');  } );  
            },
        error:
            function() {
            alert('ajax call failed...');
            },
        complete: 
            function() {
            isProcessing = false;
                            alert('Processing done');
            }
        });

    }

  return false;
  });
});

问题是,“处理完成”警报出现在“等待处理”警报之前...然后在“处理完成”警报显示之后,“等待处理”警报显示。

在完成调用并设置 isProcessing = false; 之前,我需要显示 HTML server_response;...

我如何实现这一目标?

最佳答案

这是正常行为。使用 show 方法需要一些动画时间,因此完成后会调用回调。为什么不将代码简化为这样的:

$.ajax({
    type: "GET",
    url: script_url,
    data: dataString,
    beforeSend: function() {    
        isProcessing = true;
        alert('Processing input: ' + productSearchInput);
        },
    success: function(server_response)   {
        alert('Wait for processing...');
        $('#searchresultdata').html(server_response).show('fast', function() { 
            alert('Processing done');
            isProcessing = false;
        });                    
    },
    error: function() {
        alert('ajax call failed...');
    }
});

关于javascript - Ajax 调用完成成功后,才真正完成调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12798876/

相关文章:

javascript - Typescript 生成带有 `#private;` 字段的声明 d.ts 文件

javascript - 管理员和用户面板的两个项目 VS 具有不同主题的单个应用程序

javascript - $(this) 或 event.target 或 var input = $(this)

javascript - 将 Json 导入 html(表)

php - 如何使用 jQuery 在 PHP 中制作级联下拉列表

javascript - 获取使用序列化动态检查输入复选框的所有最近字段的值

javascript - 跨浏览器 JS/jQuery 将当前 URL 复制到剪贴板

javascript - 当我导航回 jQuery Flipbook 时,导航按钮未显示

javascript - 使用本地存储从表单发布和获取数据

javascript - 使用 jQuery Flot 通过 AJAX 接收数据