Проблема DropDown в Firefox - PullRequest
0 голосов
/ 16 марта 2012

Я использую выпадающий список для пометки прочитанных сообщений, я реализовал его с помощью вызова ajax, он отлично работает в IE и Chrome, но у меня возникла проблема в Firefox, после повторного получения данных из моего контроллера, функция успеха из приведенного ниже кода имеет результат имени аргумента, в IE и Chrome работает нормально (я отправляю его значение true), но в случае Firefox он показывает ошибку msg (ReferenceError: результат не определен), я проверил эту ошибку на консоли. Я использую Jquery версии 1.6

 $("#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 ]

1 голос
/ 16 марта 2012

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

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 {
        ...
    }
}

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

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

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

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

0 голосов
/ 16 марта 2012

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

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