$ .post .done回调未触发但数据已发布到服务器

时间:2015-02-17 20:02:53

标签: javascript jquery

我有一个简单的javascript,我在服务器上发布了一些数据。

$.post(url,dataJSON, function() {
}).done(function(json) {
    $("#summary-modal").modal('hide');
}).fail(function(xhr, status, error) {
    var err = "<div>"+xhr.responseText+"</div>";
    $('#submit_err').append(err);
    $('#submit_err').show();
});

现在由于一些奇怪的原因,一旦将POST发送到服务器并被接受,它就不会使用.done函数。所以在这种情况下,模态不会隐藏。

任何想法可能出错?

感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

  

服务器不响应200,而是在chrome dev工具中显示&#34; pending&#34;

似乎您的服务器可能没有终止会话,因为服务器接收您的请求,处理它,执行必要的步骤(添加到数据库),但是然后没有告诉您的JavaScript一切已经完成,是时候继续前进了。

如果您自己编写服务器,只需通过结束会话即可轻松解决此问题,但具体信息取决于您的服务器所使用的语言。

在node.js中,你需要这样的东西:

response.writeHead(200, {'Content-Type': 'application/json'}); // "success" status
response.end(); // ends session

在PHP中

session_write_close (); // writes all data and closes

但只要看看你自己的语言方法就可以了。

除非你真的对服务器有一些影响,否则你无法对这个问题做任何事情 - 也许你可以找出一个奇特的方法,不断检查你的xmlhttprequest对象的responseText属性,但即使这样也行不通。