2012-03-16 5 views
0

Я использую раскрывающееся меню для маркировки сообщений, которые я читал, я реализовал его с помощью ajax-звонка, он отлично работает в IE и Chrome, но у меня проблема с firefox, после повторного ввода данных с моего контроллера, успеха функция ниже кода имеет результат имени аргумента, в IE и Chrome работает нормально (я отправляю его значение true), но в случае firefox он показывает ошибку msg (ReferenceError: result не определен) Я проверил эту ошибку на консоли. Я использую версию JQuery в 1,6Проблема DropDown в firefox

$("#mark").change(function() { 
      var message = $('#move_folder').val(); 
      $.ajax({ 
       type: 'POST', 
       contentType: 'application/json; charset=utf-8', 
       url: '/Message/TakeActions' 
          + '?message=' + message, 
       dataType: 'json', 
       data: $.toJSON(msgsData), 
       success: function (result) { 
        if (result == true) { 
         // window.location.href = "/inviteFriends/Index"; 
         window.location.reload(); 
         DivMsgText("Message moved successfully to" + message);        
         $("#selectall").removeAttr("checked"); 
         for (var i = 0; i < $('.case').length; i++) { 
          if ($('.case')[i].checked) 
           $('.case')[i].checked = false; 
         } 
        } 
        else { 
         if (message == "mark_read") { 
          alert("Select a message to mark as read"); 
         } 
         else { 
          // DivMsgText("Select a message to move"); 
          alert("Select a message to move"); 
         } 
         $("#divmsg").empty(); 
         $("#divmsg").removeClass("success grid_9"); 
         $("#divmsg").html().remove(); 
        } 
       },    
       async: false, 
       cache: false 
      }); 
     }); 
+2

Почему после вызова 'window.location.reload();' вы продолжаете писать javascript? Когда вы вызываете эту функцию, страница перезагружается. –

+1

Мне нужно перезагрузить страницу, этот код отлично работает на IE и chrome –

+2

, если вы перезагрузите страницу javascript прекращает выполнение. Это чистый шанс, что ваш код работает в IE и Chrome. Возможно, для перезагрузки страницы требуется немного больше времени, и может быть выполнено несколько дополнительных строк. Во всяком случае, вы не должны использовать javascript после перезагрузки страницы или перенаправления на другую страницу. Также почему вы манипулируете необработанными элементами DOM: '$ ('. Case') [i] .checked' вместо использования объектов jQuery? –

ответ

1

Попробуйте заменить следующий цикл:

for (var i = 0; i < $('.case').length; i++) { 
    if ($('.case')[i].checked) 
     $('.case')[i].checked = false; 
} 

с этим:

$('.case').removeAttr('checked'); 

Также убедитесь, что вы правильно URL кодировать параметры строки запроса:

'?message=' + encodeURIComponent(message) 

Также вы не должны использовать javascript после window.location.reload();. Эта функция делает то, что она называет: она перезагружает страницу, перемещаясь от нее, что, как следствие, может остановить выполнение любых последующих js.

Также попытайтесь вернуть правильный объект JSON из вашего действия TakeActions контроллера:

public ActionResult TakeActions() 
{ 
    ... 
    return Json(new { status = true }); 
} 

, а затем на стороне клиента использовать следующий тест:

success: function(result) { 
    if (result.status) { 
     ... 
    } else { 
     ... 
    } 
} 

Проблема с кодом является то, что Я подозреваю, что вы только вернулись:

public ActionResult TakeActions() 
{ 
    ... 
    return Json(true); 
} 

, который отправляет строку true в ответ, который является недопустимой строкой JSON, и все же вы сообщаете jQuery, что ваш сервер возвращает JSON, установив dataType: 'json'.

И еще одно замечание: вы, кажется, используете переменную message, которая не объявлена ​​нигде в области, которую вы указали в своем вопросе. Действительно ли эта переменная декларируется? Объявлен ли он в области, доступной внутри вашей функции?

+0

Я возвращаю return Json (true); в моем контроллере –

+1

@SyedSalmanRazaZaidi, это может быть проблемой. Попробуйте вернуть 'Json (new {status = true});', а затем на клиентский тест 'if (result.status) {...}'. –

0

код после окна.location.reload(); не будет выполняться. Причины, которые работают в некоторых браузерах, это то, что ваш window.location.reload(); там не работает, вы должны использовать window.location.reload (true); но в конце функции succes и, возможно, с небольшим таймаутом до ...

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