2013-11-02 1 views
0

От 4 Mvc действий:Json responseText пустой и его статуса как ошибка

[HttpPost] 
    public ActionResult DoStuff(string str) 
    { 
     // Do some things 

      Response.ContentType = "application/json;charset=utf-8"; 
      Response.StatusCode = someCondition == true ? HttpStatusCode.OK : HttpStatusCode.NotFound); 
      Response.TrySkipIisCustomErrors = true; 

     return Json(
      new { 
       object1 = 1, 
       object2 = someArray[0], 
       object3 = someArray[1], 
       object4 = someValue == 4 ? 1 : 0 
      } 
     ); 
    } 

В JQuery Ajax:

ajax({ 
    url: '/Ctrler/DoStuff/', 
    data: { str: someString }, 
    type: 'POST', 
    dataType: 'json' 
}).then(function (data) { 
    var _response = $.parseJSON(data); 
}, function (data) { 
    var _response = $.parseJSON(data.responseText); 
}); 

data.responseText пуст ("") и является его статусом "ошибкой". Это не всегда происходит. Я заметил, что это происходит случайным образом. Зачем?

+0

Ничего не происходит случайным образом :) Если вы получаете ошибки из запроса, проверьте консоль. Произошла ошибка на стороне сервера. –

+0

@RoryMcCrossan Я поймал ошибку в вызове ajax с помощью try-catch, и он говорит о синтаксической ошибке в результате попытки разобрать json, ответ responseText пуст, а statusText - ошибка. Если ничего случайного не происходит, потому что выполнение одного и того же действия в контроллере x раз, много раз работает, а затем есть тот, который терпит неудачу? – user1624552

+0

@RoryMcCrossan console говорит: SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ee2, не удалось завершить операцию из-за ошибки 00002ee2. – user1624552

ответ

0

Ваши данные уже конвертированы в объект JSON, поэтому вам не нужно его снова анализировать. Попробуйте следующее:

ajax({ 
    url: '/Ctrler/DoStuff/', 
    data: { str: someString }, 
    type: 'POST', 
    dataType: 'json' 
}).then(function (data) { 
    // use data here... 
    alert(data.object1); 
}, function() { 
    alert('request failed'); 
}); 
+0

Я сделал ваше решение, и data.object1 не определен, но data.responseText содержит объект json, поэтому я разбирал его как json. Однако бывают случаи, когда один и тот же код терпит неудачу, поскольку data.responseText пуст. – user1624552

+0

Я забыл опубликовать кусок кода в теме. Пожалуйста, см. Мой пост обновлено: мне нужно вернуть объект json плюс код состояния http. – user1624552

+0

Кажется, что это неудачно, когда отлаживается от визуальной студии. После развертывания на веб-сайте этого не происходит ... Не знаю, почему ... – user1624552

Смежные вопросы