jQuery Ajax Uncaught TypeError:不能使用' in'运营商搜索

时间:2015-06-07 21:26:32

标签: jquery ajax json error-handling

您好我正在使用laravel jQuery& ajax返回JSON错误:

error: function (jqXhr, json, errorThrown) {
    var errors = JSON.stringify(jqXhr.responseJSON);
     var errorsHtml= '';
      $.each( errors, function( key, value ) {
         errorsHtml += '<li>' + value[0] + '</li>'; 
       });
        toastr.error( errorsHtml , "Error " + jqXhr.status +': '+ errorThrown);

     } 

但是我收到以下错误:

Uncaught TypeError: Cannot use 'in' operator to search for '209' in {"errors"{"name":["A name is required"],"hours":["Please input a capacity in hours."],"start_date":["Please input a start date."],"end_date":["Please input an end date."]}}

任何想法,如果我使用.parse而不是.stringify,我会收到以下错误:

Uncaught SyntaxError: Unexpected token j

任何想法我做错了什么?

提前致谢。

修改

var errors = JSON.stringify(jqXhr.responseJSON);
console.log('normal'+jqXhr.responseJSON);
console.log('stringify: '+errors);
normal[object Object]
 stringify: {"errors":{"name":["A name is required"],"hours":["Please input a capacity in hours."],"start_date":["Please input a start date."],"end_date":["Please input an end date."]}}

1 个答案:

答案 0 :(得分:2)

您应该使用:

error: function(jqXhr, textStatus, errorThrown) {
    var errorsHtml = '';
    $.each(jqXhr.responseJSON.errors, function(key, value) {
         errorsHtml += '<li>' + value[0] + '</li>'; 
    });
    toastr.error(errorsHtml, "Error " + jqXhr.status +': '+ errorThrown);
}

jqXhr.responseJSON是已经解析为对象的响应。您在编辑中显示的JSON将是一个具有一个名为“errors”的属性的对象。您想循环遍历该属性的键/值。