Javascript AJAX调用只工作一次

Javascript AJAX调用只工作一次,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是我的密码: <script type="text/javascript"> $(document).ready(function() { $('#username').change(check_username); }); function check_username() { $("#check_username").html('<img src="images/site/ajax-loader.gif" />use

这是我的密码:

<script type="text/javascript">
    $(document).ready(function() {
      $('#username').change(check_username);
    });

    function check_username() {
      $("#check_username").html('<img src="images/site/ajax-loader.gif" />username avilable??').delay(5000);
      var usernametotest = $('#username').val();    
      $.post("backend/username_available.php", { username: usernametotest})
       .done(function(data) {
         $("#check_username").replaceWith(data);
       });
    }
</script>

$(文档).ready(函数(){
$(“#用户名”)。更改(检查#用户名);
});
函数检查\u用户名(){
$(“#检查#u用户名”).html('username avibable')。延迟(5000);
var usernametost=$('#username').val();
$.post(“backend/username\u available.php”,{username:usernametost})
.完成(功能(数据){
$(“#检查#u用户名”)。替换为(数据);
});
}
我使用此代码与AJACX一起检查表单中用户名的可用性。 它工作完美,但只有一次。当一个用户名被占用并且我更改了用户名时,在第一个用户名之后没有进行AJAX检查?文本“用户名已存在”(在变量数据中)不替换为“用户名确定”

此JavaScript添加在
标记之前。

您可以尝试以下操作:

$('#username').on('change', function() {

  // write your code here

});

您的代码看起来很好-请参阅
usernametost
值上的警告,以了解更多可见性

$(document).ready(function() {
    $('#username').change(check_username);
});

function check_username(){

    $("#check_username").html('username avilable??').delay(5000);
    var usernametotest = $('#username').val();

    alert('posting username ' + usernametotest);

    $.post("backend/username_available.php", { username: usernametotest} )
        .done(function(data) {
            $("#check_username").replaceWith( data );
        });  
}
每次都会使用正确的负载发出post请求,因此不会出现问题(请检查浏览器开发人员工具,例如Chrome中的Network tab/XHR)


后端/username\u available.php返回的响应肯定有问题?检查第一个请求的响应与其他请求的响应,差异以及由此产生的问题可能会跳到您身上。

每当您更换一个元素时。。。在这里,你可以这样做

$("#check_username").replaceWith( data );
所有这些元素的处理程序都将丢失。因此
change()
不再有效。为了能够再次使用它,您只需在重写元素后再次绑定该元素:

$('#username').change(check_username);
或将处理程序绑定到父级并将其委派:

$('#username').parent().on('click', '#username', check_username);

(我觉得类选择器会工作得更好——我称之为迷信)

您是否研究过开发人员的工具,认为后续请求实际上不会生成?我怀疑服务器可能总是用“用户名已存在”来响应。在
done
函数中,
data
变量是什么?在Firebug中DOM加载成功后,我看到后续的调用正在进行,我得到了正确的回复(纯文本)。因此,问题似乎是在第一次调用后,div check_用户名不再更新。最后一部分(延迟已被删除,只需测试我的gifloader img是否出现)您正在用post请求中收到的任何内容替换
#check_username
。新元素是否具有相同的id?对于jQuery 1.7,live已被弃用,而对于jq 1.9,live已被删除。他为什么要使用live?在ajax处理过程中,他不会替换#username,因此使用“change”是可以的。因为.on更好/syessss!我没有意识到我正在替换comeplete div,而只是替换div的内容。将div添加到后端文件的应答中,它就像champ一样工作。谢谢你的想法!!!