AJAX-вызов Javascript завершается неудачно в Firefox, когда возвращается false - PullRequest
0 голосов
/ 03 февраля 2012

Есть несколько вопросов, похожих на этот, но они не совпадают, так что вот так?

У меня есть веб-сайт, на котором у меня есть форма для входа.Я хочу использовать ajax для вызова функции PHP, и в то время как все отлично работает в Chrome.В Firefox, когда я нажимаю кнопку входа в систему, которая запускает функцию javascript logIn (), я перенаправляюсь на страницу javascript: logIn (), которая белого цвета и просто говорит false.Если я удаляю return false в методе logIn (), он, кажется, работает нормально.

<form  method="post" id="loginform" action="javascript:logIn()">
    <div>
        <input type="text" value="Username..." name="username" id="username" onfocus="defaultInputUsername(this)" onblur="clearInputUsername(this)" />
        <input type="text" value="Password..." name="passwordText" id="passwordText" onfocus="setPass()"/>
        <input type="password" value="" name="password" id="password" onfocus="defaultInputPassword(this)" onblur="checkPass()" />
        <input type="submit" id="submit" value="Login" name="Submit"/>
        <a href="create-account.php" id="create"><span>Create Account</span></a>
    </div>
</form>

Выше приведена форма, которая вызывает метод javascript logIn (), который находится ниже:

function logIn() {
    var action = "check-login.php";
    var form_data = {
        username : $("#username").val(),
        password : $("#password").val(),
        is_ajax : 1
    };

    $.ajax({
        type : "POST",
        url : action,
        data : form_data,
        success : function(response) {
            if(response != 'failed')
                $("#loginform").slideUp('slow', function() {
                    $("#login_response").html('<ul id="usernav" class="sf-menu sf-js-enabled sf-shadow"><li><div id="message"></div><ul><li><a href="#"><span>View Profile</span></a></li>  <li><a href="#" onclick="logOut()"><span>Logout</span></a>  </li></ul></li></ul>');
                    $("#message").html('<a id="userlink" href="#"><span>' + response + '</span></a>');
                    $("ul.sf-menu").superfish({
                        animation : {
                            height : 'show'
                        }, // slide-down effect without fade-in
                        delay : 800, // 1.2 second delay on mouseout
                        autoArrows : false
                    });
                });
            else {
                $("#username").css("border", "2px red inset");
                $("#password").css("border", "2px red inset");
            }
        }
    });

    return false;
}

Если кто-то может сказать мне, когда он работает в Chrome, а не Firefox, и если я должен использовать, вернуть false вообще.Это было бы здорово.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

Это очень нетрадиционный код, поэтому немного сложно ответить полностью.

Чтобы все это взломать, я бы изменил ваше действие = onsubmit =.«action» не было предназначено для этого.

<form ...stuff... onsubmit="return logIn();">

Возвращенное значение false при отправке запрещает публикацию страницы.Убедитесь, что вы заметили, что возвращает результат logIn (), что в вашем случае всегда ложно.

Вы также можете сделать:

onsubmit="logIn(); return false;"

и удалитьreturn false из вашей функции входа в систему.

Примечание : вызов ajax является асинхронным по умолчанию.

0 голосов
/ 04 февраля 2012

Поскольку вы уже используете jQuery, почему бы не установить атрибут действия для страницы, которая регистрирует пользователя, если у пользователя отключен JavaScript, а затем добавить некоторый JavaScript, который автоматически связывает кнопку отправки, чтобы использовать ваш вход в систему () - функция

Что-то вроде этого, вероятно, будет работать (не проверял, но должно работать):

//When document is ready/loaded
$(document).ready(function () {

    //Register click handler for submit-button with id "submit"
    $("#submit").click(function(event) {
        //call javascript and prevent postback
        event.preventDefault();
        logIn();
    });
}

и ваша форма входа может выглядеть примерно так:

<form  method="post" id="loginform" action="login-page-without-javascript.php">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...