Вызов jquery.ajax периодически получает нулевые данные и другие реальные данные - PullRequest
1 голос
/ 10 ноября 2010

Я использую фреймворк MVC.net и сталкиваюсь со странной проблемой с вызовом jQuery ajax.

У меня есть страница, на которой пользователь может ввести сумму, а затем нажать «Далее».Когда они нажимают «далее», я выполняю ajax-вызов на сервер и возвращаю некоторую обновленную информацию через JSON.Это все довольно стандартные вещи.

Однако странность заключается в возвращаемых данных JSON.Переменная data (в обратном вызове) иногда равна нулю, а иногда содержит фактические данные с сервера.Странно то, что действие контроллера всегда вызывается, но возвращаемые данные не всегда превращаются в функцию обратного вызова ajax.Это не имеет никакого отношения к интервалу времени ожидания, так как установка значения не влияет на проблему.

Я часто могу вызвать условие, когда я отлаживаю код действия, но условие не происходит, так какчасто, когда я не отлаживаю.

Кто-нибудь сталкивался с подобной проблемой или есть предложения об обходных путях или других вещах, чтобы исследовать?

var postbackUrl = "/Balance/Add?amt=" + $("#Amount").val();
$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: postbackUrl,
    data: "{}",
    dataType: "json",
    success: function (data,status,request) {
        $("#x_amount").val(data.x_newBalance)

    }
});

ОБНОВЛЕНИЕ: В попытке получитьДля большей ясности я переключил обратный вызов на использование версии с 3 переменными.Во всех случаях статус «успех».Интересно, что с запросом.

Запрос всегда имеет статус 200 и состояние ReadyState 4. Разница с responseBody.Как и следовало ожидать, когда «data» имеет значение null, responseBody имеет значение null, а когда «data» является действительным, тогда responseBody имеет содержимое.

Полагаю, мне нужно выяснить, почему responseBody удаляется.

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

Вы используете JSON в качестве типа содержимого запроса и по-прежнему предоставляете параметры в строке запроса. Почему бы просто не использовать:

$.ajax({
    type: 'POST',
    url: '/Balance/Add',
    data: { amt: $('#Amount').val() },
    dataType: 'json',
    success: function (result) {
        $('#x_amount').val(result.x_newBalance);
    }
});

Также обратите внимание, что я использовал result в качестве переменной, чтобы избежать путаницы с data.

0 голосов
/ 20 ноября 2010

Я вижу успешный обратный вызов, переданный в $ .ajax, вызываемый, когда удаленный сервер недоступен, в этом случае значение данных равно нулю.Это кажется неправильным, возможно, это связано с тем, что вы видите.

update Моя проблема - ошибка в jQuery 1.4.2, возможно, вы столкнулись с той же проблемой?http://bugs.jquery.com/ticket/6172

0 голосов
/ 10 ноября 2010

Вы пробовали jquery-ajax параметр "timeout"?

 $.ajax({ 
  type: "POST", 
  contentType: "application/json; charset=utf-8", 
  url: postbackUrl, 
  data: "{}", 
  timeout: 20000,
  dataType: "json", 
  success: function (data) { 
     $("#x_amount").val(data.x_newBalance) 

  } 
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...