AJAX仅在首次单击后返回数据

时间:2015-06-30 19:05:48

标签: javascript jquery ajax

我有这个ajax请求脚本:

    function SendData(){
$( "#Submit" ).click(function() {
     $('#Submit').attr("disabled", true);
    $.ajax({
        type:"POST",
        url:"assets/process.php",
        data: {
            Years : $('#Years').val()
        },
        success: function(Response){
            if (Response.Status == 'Error') {                
                swal("Ups!", "Nemo' zebavaš", "error");
            } else if (Response.Status == 'Error0') {
                  swal("Ups!", "Servis 'Misterije' mogu koristiti samo rođene osobe!", "error");
            }
            else if (Response.Status == 'Error120') {
                  swal("Ups!", "Žao nam je! Niste podobni za korišćenje WEB Servisa 'Misterije'!", "error");
            } 
            else if (Response.Status == 'Success') {
                   swal("USPEŠNO!", 'Rođeni ste: '+Response.Calculated+' godine!', "success");
            }
            $('#Submit').attr("disabled", false);
        }
    });
});
}

当我在浏览器中加载页面时,添加数据到输入并单击按钮没有任何反应,但是在第二次和所有点击之后直到我刷新页面都正常工作。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

当您点击按钮时,大概是调用SendData()功能?

此功能不能按照您的想法行事。它没有调用AJAX请求。 所有此功能的作用是将点击处理程序附加到按钮。而已。然后 next 时单击按钮,该处理程序将执行。

(更不用说它还会附加另一个点击处理程序。所以第三次点击会调用处理程序两次。依此类推......)

没有必要在函数中包含所有这些内容。而不是:

function SendData(){
  $( "#Submit" ).click(function() {
    // your code
  });
}

这样做:

$( "#Submit" ).click(function() {
  // your code
});

这将附加点击处理程序,而不是调用它。之后,当您单击按钮时,将调用处理程序。

最糟糕的是,如果按钮在此代码执行时尚不存在,则必须执行此操作:

$(function () {
  $( "#Submit" ).click(function() {
    // your code
  });
});

这将等到document.ready事件和然后附加处理程序。

(注意:在您删除该功能后,您还希望删除对SendData()的任何引用。我假设您是在线调用它按钮。但是当你用jQuery附加点击处理程序时,你不需要这样做。)

答案 1 :(得分:0)

不要调用函数

将您的代码放入$(document).ready function