我有一个简单的 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 函数。所以在这种情况下,模式不会隐藏。
有什么想法可能是错误的吗?
感谢您的阅读。
最佳答案
the server does not respond with a 200, but instead in chrome dev tools it shows "pending"
看起来您的服务器可能不会终止 session ,因为服务器接收您的请求,处理它,执行必要的步骤(添加到数据库),但随后不会告诉您的 JavaScript 一切都已完成是时候继续前进了。
如果您自己正在编写服务器,则只需结束 session 即可轻松解决此问题,但具体细节取决于您的服务器所使用的语言。
在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
属性对象,但即使这样也可能行不通。
关于javascript - $.post .done 回调未触发,但数据已发布到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28570119/