【发布时间】:2014-10-01 15:04:24
【问题描述】:
我知道我的问题是 jQuery 试图将响应的主体解析为 json,但主体未定义,因此会引发错误。
我无法更改响应。这是来自 Jenkins 服务器的默认响应。它在标头中发送 201、404 或 500,我想处理它。
我的 ajax:
$(document).ready(function () {
$('#reviewForm').bootstrapValidator({
...stuff...
...validation...
})
.on('success.form.bv', function (e) {
// Prevent form submission
e.preventDefault();
// Get the form instance
var $form = $(e.target);
// Use Ajax to submit form data
$.ajax({
type: 'POST',
url: url+$form.serialize(),
dataType: 'text',
complete: function() {
alert("Success.");
},
error: function(xhr, status, text) {
alert("failure");
}
});
尽管帖子成功(创建了201),但由于未定义的正文导致语法错误,它仍然会发生错误。
我很乐意处理 error: part of ajax 中的错误,但我一生都无法弄清楚如何从响应的标头中获取状态代码。
就像我说的,如果可以的话,我会改变响应,但这正是 Jenkins 的工作方式。
谢谢。
编辑:响应标头
Status Code: 201 Created
Connection: Keep-Alive
Content-Type: text/plain; charset=UTF-8
Date: Wed, 01 Oct 2014 14:51:12 GMT
Keep-Alive: timeout=15, max=100
Location: https://jenkins....
Server: Jetty(8.y.z-SNAPSHOT)
Transfer-Encoding: chunked
这是 xhr(xml http 响应)
{
"readyState": 0,
"status": 0,
"statusText": "error"
}
【问题讨论】:
-
是什么让您认为 jQuery 试图将响应解析为 JSON?根据您的代码,您期待
text- 所以undefined响应正文不会有所作为。 -
dataType: 'text'意味着它根本不会解析响应。它会将其保留为简单的字符串。无论您的错误是什么,都来自其他方面。 -
我知道 jquery 将其作为错误处理,因为我的失败警报每次都会弹出。我在那里有一个成功的改动,但它永远不会弹出。如果不是解析错误,那就是别的,生病继续调查
-
在您帖子的代码中,您应该同时看到“失败”和“成功”警报,因为
complete回调将在error之后运行。 -
@JamesThorpe 是的,我收到了这些警报。
标签: javascript jquery html ajax post