jQuery .post()没有触发成功处理程序方法

时间:2013-06-02 22:10:49

标签: javascript jquery jsfiddle

情况:

  • 我有一个简单的表单,会调用.post() - 调用()而不是实际提交。
  • 帖子的工作原理是它会发布请求并在响应正文中收到带有预期字符串的200 (OK)状态(可以在FireBug的Net-View中看到)。

问题:

  • 永远不会执行alert()的匿名函数。那是为什么?

备注:

  • 我已插入警告以指示方法何时触发
  • 在代码下方方便链接。

守则:

这是我的表格:

<form>
    <input type="submit" value="Submit" />
</form>

这是我期望的工作:

$(document).ready(function () {
    $('form').submit(function (e) {
        e.preventDefault();
        $.post('/echo/html/', {
            html: "<span>jsFiddle test return msg</span>",
            delay: 1
        }, function (data, textStatus, jqXHR) { 
            $('form').append(data); 
            alert("done"); // <----- THIS NEVER FIRES
        }, 'json');
    });
});

FIDDLE 1


这不起作用:

$(document).ready(function () {
    $('form').submit(function (e) {
        e.preventDefault();
        $.post('/echo/html/', {
            html: "<span>jsFiddle test return msg</span>",
            delay: 1
        }, null, 'json').done(function (data, textStatus, jqXHR) {
            $('form').append(data);
            alert("done"); // <----- THIS NEVER FIRES
        });
    });
});

FIDDLE 2


这将触发警报,但数据将为空。

$(document).ready(function () {
    $('form').submit(function (e) {
        e.preventDefault();
        $.post('/echo/html/', {
            html: "<span>jsFiddle test return msg</span>",
            delay: 1,
            success: function (data, textStatus, jqXHR) {
                $('form').append(data); // <----- DATA IS UNDEFINED
                 alert("done");         // <----- THIS FIRES!
            }
        }, null, 'json');
    });
});

FIDDLE 3

1 个答案:

答案 0 :(得分:4)

您将错误的数据类型设置为json,服务器返回html类型数据。顺便说一句,你不需要指定它:

  

dataType类型:String服务器所需的数据类型。   默认值:智能猜测(xml,json,脚本,文本,html)。

http://jsfiddle.net/9NrL5/4/

$(document).ready(function () {
    $('form').submit(function (e) {
        e.preventDefault();
        $.post('/echo/html/', {
            html: "<span>jsFiddle test return msg</span>",
            delay: 1
        }, function (data, textStatus, jqXHR) {
            $('form').append(data);
            alert("done");
        });
    });
});