Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理未定义主体的响应?_Javascript_Jquery_Html_Ajax_Post - Fatal编程技术网

Javascript 如何处理未定义主体的响应?

Javascript 如何处理未定义主体的响应?,javascript,jquery,html,ajax,post,Javascript,Jquery,Html,Ajax,Post,我知道我的问题是jQuery试图将响应的主体解析为json,但主体未定义,因此会抛出错误 我不能改变回答。这是Jenkins服务器的默认响应。它在报头中发送一个201、404或500,我想处理它 我的ajax: $(document).ready(function () { $('#reviewForm').bootstrapValidator({ ...stuff... ...validation... }) .on('success.form.bv

我知道我的问题是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");
    }
});
尽管成功创建了post 201,但由于未定义的主体导致语法错误,它仍然会遇到错误

我很乐意处理error:ajax的一部分中的错误,但我一辈子都不知道如何从响应的头中获取状态代码

$.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
    }
});
就像我说的,如果可以的话,我会改变回答,但詹金斯就是这样工作的

多谢各位

编辑:响应标题

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将触发哪些函数,即complete、error或success

那么,试试这个:

$.ajax({
    type: 'POST',
    url: url,
    dataType: 'text',
    complete: function(response) {
        console.log(response); 
    }); 
在将来,这将允许您更好地调试。通过您的检查元素控制台

但是,在本例中,状态代码为

答复.状态

error函数将触发任何不是200的函数,因此最好只使用完整函数,只需将错误放在switch case语句的默认块中

[...]
complete: function(response){
    switch(response.status){
        case 201: 
           alert("success"
        break;
        default:
            alert("Something unexpected occurred"); 
        break;
}
只需使用完整的处理程序-它将在调用成功或错误后运行。不管是哪种方式,对于complete还是error,第一个参数都是一个对象,它有一个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
    }
});

如果我是认真的,你想检查服务器201、200、500的响应: 也许用吧,一直用


或者您可以在xhr对象上使用getAllResponseHeaders?

您可以对状态代码进行特定回调,例如:

$.ajax({
    ...
   statusCode: {
     201: function() { /* I received a 201 */ },
     404: function() { /* I received a 404 */ },
     500: function() { /* I received a 500 */ }
   }
});
这列在

中。您可以使用状态代码


是什么让您认为jQuery试图将响应解析为JSON?根据您的代码,您需要的是文本,因此未定义的响应体不会产生任何影响。数据类型:“text”表示它根本不会解析响应。它将保留为一个简单的字符串。无论您的错误是什么,都是来自其他方面。我知道jquery会将其作为错误处理,因为我的失败警报每次都会弹出。我有一个成功的改变在那里,但它永远不会弹出。如果不是解析错误,那是另外一种情况,我会继续在帖子中调查您的代码,您应该会看到失败和成功警报,因为完整的回调将在出现错误后运行。@JamesThorpe是的,我收到了这些警报。我试过了,它从未命中这些状态代码。我想你可能会混淆术语,状态代码在响应的标题中,你显示的标题给出了201,响应的主体中没有状态代码。你可能是对的,但无论如何,它都不会提醒我。我可以看到控制台中正在创建201响应,但它从未为我提醒201。我已从以前的代码中删除了数据。如果警报来了,试试看。@kum在那里也不走运。我的问题是,对于我的所有响应,response.status=0。然而,当我观看网络控制台时,我可以看到状态代码实际上应该是201和404。状态代码来自身体,我的是未定义的。我尝试过这个,但它从未命中这些。我的响应状态代码为0,并且不会根据201或404更改。当我这样做时,我的响应对象看起来如下:{readyState:0,status:0,statusText:error}不管响应头的状态代码如何,这都是一样的。所以我完全按照您的建议添加了…尽管在网络控制台中看到一个201完成,它仍然会提醒默认语句。response.status=0然后这将是您的问题:出于某种原因,它永远不会进入“始终”。我需要删除完整的和失败的,让它去那里吗?现在你可以检查你的反应,并确定返回代码的状态,你可以做些什么。。。如果“完成/错误”不起作用,请尝试此操作。是否尝试GetAllResponseHeader已尝试此操作。问题是xhr对象对我没有帮助。{readyState:0,状态:0,状态文本:错误}
$.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');
   },
});