0

我不明白为什么这个 Ajax 脚本不起作用。

继承人的代码:

$(document).on('submit', '.edit_user', function(){
    console.log('submit');
    $.post
    (
      $(this).attr('action'),
      $(this).serialize(),
      function(data){
        console.log("data");
        console.log(data);
        $('#edit_first_name').val(data['first_name']);
      },
      "json"
    );
    return false;
  });

submit在控制台中显示了,所以我知道它.post被调用了。我也知道它会成功,return false因为表单从不提交和重定向。

然而,它从来没有console.log(data)

我很确定这一切都是因为我忘记了一些简单的事情。

4

4 回答 4

1

尝试使用.fail()回调并查看它是否返回,并确保服务器正确发送 json 标头或$.post将失败。

$(document).on('submit', '.edit_user', function(){
    console.log('submit');
    var jqXHR = $.post($(this).attr('action'), $(this).serialize(),
        function(data){
            console.log("data");
            console.log(data);
            $('#edit_first_name').val(data['first_name']);
        },
        "json"
    );
    jqXHR.fail(function(jqXHR, textStatus, errorThrown) {
        console.log('error', textStatus, errorThrown);
    });
    return false;
});

如果您使用的是 PHP,请确保在任何其他输出之前打印正确的标题。

<?php
    header('Content-type: application/json');
    ....code...
    echo json_encode(some_array);
于 2013-08-28T07:48:13.157 回答
0

您定义的函数用于成功回调。确保您当前的帖子从服务器返回成功的响应。或者将.post()调用转换为.ajax()调用并定义失败回调

于 2013-08-28T07:43:18.950 回答
0

用这个,

$(document).on('submit', '.edit_user', function(e){
e.preventDefault();
console.log('submit');
$.post
(
  $(this).attr('action'),
  $(this).serialize(),
  function(data){
    console.log("data");
    console.log(data);
    $('#edit_first_name').val(data['first_name']);
  },
  "json"
);
return false;
});

使用 preventDefault 函数来防止提交的默认行为。.edit_user 也应该是表单元素的类

于 2013-08-28T07:50:38.217 回答
-1

你的 javascript 记录器会给你返回什么吗?

于 2013-08-28T07:41:39.623 回答