使用Jquery发出AJAX POST请求时的不同行为

时间:2014-01-16 17:49:09

标签: jquery post

这可能是我的误解,但我希望有人解释我想念的地方。

如果我有使用Jquery发出POST请求的以下实现,则在我执行“click”事件之前不会发出请求。

$(document).ready(function(){
  $("button").click(function(){
    $.post("demo_test_post.asp",
    {
      name:"Donald Duck",
      city:"Duckburg"
    },
    function(data,status){
      alert("Data: " + data + "\nStatus: " + status);
    });
  });
});

但是,如果我通过单独定义匿名函数来为其命名,那么即使在加载页面时也会尝试发送帖子请求。

<script>
$(document).ready(function(){
  $("button").click(callFunction());
});
var callFunction = function(){
    $.post("demo_test_post.asp",
    {
      name:"Donald Duck",
      city:"Duckburg"
    },
    function(data,status){
      alert("Data: " + data + "\nStatus: " + status);
    });
  };
</script>

有人可以解释一下我的理解中缺乏的东西。对我来说,两者应该以同样的方式工作

感谢您阅读

2 个答案:

答案 0 :(得分:3)

这可能是因为你应该引用该函数,而不是调用它

$(document).ready(function(){
  $("button").click(callFunction); // no parenthesis
});

添加括号会立即调用该函数并返回结果,您只想引用它

答案 1 :(得分:0)

请尝试使用此格式,不要忘记将id="btn"添加到按钮

  $('#btn').click(function(event){

      var formData = {
           name:"Donald Duck",
          city:"Duckburg"
      }

    $.ajax({
                type        :   'POST'  ,
                url         :   'someurl',
                data        :   JSON.stringify(formData),
                contentTYpe :   'application/json',
                error       :   function(data,status,error){
                                    console.log(data+': '+status+': '+ error);
                                },
        success     :     function(data,status){
                  alert("Data: " + data + "\nStatus: " + status);
    });
        }).done(function(apiResponse){
                //Do something when done
        });
  });