【问题标题】:JQuery .ajax with async=true always returns error带有 async=true 的 JQuery .ajax 总是返回错误
【发布时间】:2012-10-30 09:05:34
【问题描述】:

我尝试进行 jQuery.ajax 调用:

jQuery("#search_form").live("submit", function() {
    search_nr = jQuery("#search_input").val();
    jQuery.ajax({
        url: '/modules/mod_findarticle/process.php',
        data: "search_nr="+search_nr,
        async: true,
        'success':  function(data) {
                        alert(data);
                    },
        'error': function(jqXHR, textStatus, errorThrown) {
                  alert(jqXHR.status+",  " + jqXHR.statusText+",  "+textStatus+",  "+errorThrown);
        }
    });
});

作为回报,我总是收到带有 “0,错误,错误,” 消息的警报。 async=false 一切正常。 我知道通过异步调用,脚本会在收到任何实际数据之前完成工作,但是可以做些什么来避免这种情况?

【问题讨论】:

  • 如果您在 Firebug 中检查响应,返回的错误代码是什么?
  • 你为什么还要设置它?默认情况下是这样。
  • 与错误无关,但不推荐使用.live。你应该使用.on
  • PHP 返回的是什么数据?是否正确设置了内容类型?
  • 感谢您的回复。所以: 1. 错误消息由alert(jqXHR.status+", " + jqXHR.statusText+", "+textStatus+", "+errorThrown); 显示,它显示 0, error, error, 2. 事实上,异步是默认启用的。如果我完全删除 async=true,则没有任何变化。 3. 感谢您的评论,但我怀疑问题与 .live() 有关 4. 我尝试将 dataType 参数添加到 .ajax 调用中,将其设置为“html”或“json”无效。

标签: jquery ajax asynchronous


【解决方案1】:

感谢用户 mccannf 解决了问题: 通过触发表单上的“提交”事件,数据被提交了两次,因此脚本总是在第二次调用之前停止处理数据。将 .live(...) 中的 function() 替换为 function(e) {e.preventDefault; ... } 会禁用默认提交操作,因此可以解决问题!

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多