如何处理未定义正文的响应
How to handle response with undefined body?
我知道我的问题是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),但由于未定义的正文导致语法错误,它仍然会出错。
我很乐意处理错误中的错误:ajax的一部分,但我一辈子都不知道如何从响应的头部获取状态代码。
正如我所说,如果可以的话,我会改变回应,但这正是詹金斯的工作方式。
谢谢。
EDIT:响应标头
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"
}
您可以对状态代码进行特定的回调,例如:
$.ajax({
...
statusCode: {
201: function() { /* I received a 201 */ },
404: function() { /* I received a 404 */ },
500: function() { /* I received a 500 */ }
}
});
这在文档中列出
状态代码决定jQuery将触发哪个函数(即complete
、error
或success
)。
所以,试试这个:
$.ajax({
type: 'POST',
url: url,
dataType: 'text',
complete: function(response) {
console.log(response);
});
在将来,这将使您能够更好地进行调试。(通过您的检查元件控制台)
但是,在本例中,状态代码将在中
response.status
error
函数将对任何不是200的函数进行激发,因此您最好只使用完整函数,只需将错误放在switch-case
语句的default
块中。。。
[...]
complete: function(response){
switch(response.status){
case 201:
alert("success"
break;
default:
alert("Something unexpected occurred");
break;
}
只需使用complete
处理程序-它将在调用success
或error
之后运行。无论哪种方式,对于complete
和error
,第一个参数都是jqXHR
对象,它具有status
属性,该属性将为您提供响应的状态。
$.ajax({
type: 'POST',
url: url,
dataType: 'text',
complete: function(xhr) {
//this handler runs regardless of success or error
//query xhr.status for the response code
}
});
您可以使用statusCode
$.ajax({
type: 'POST',
url: url,
statusCode: {
200: function (response) {
alert('200');
},
201: function (response) {
alert('201');
},
404: function (response) {
alert('400');
}
}, success: function () {
alert('Success');
},
});
如果我是认真的,你想检查来自服务器(201200500)的响应:可能使用.awlways()
$.ajax({
type: 'POST',
url: url,
dataType: 'text',
always: function(status){
alert(status);
}
});
或者u可以在xhr对象上使用getAllResponseHeaders()
?
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何消除代码中的未定义和其他问题
- 未捕获的ReferenceError:$未定义
- this.router在AngularJS 2中未定义
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 节点fs.stat名称未定义
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- Jquery未定义函数正在停止其他操作
- AngularJS指令出错-无法读取属性'编译'的未定义
- 类型错误:无法读取开机自检后未定义的属性“正文”(平均值)
- 使用 NodeJS 的请求模块进行 HTTP 身份验证,返回未定义的正文
- 邮件的快速请求正文未定义
- 如何处理未定义正文的响应