2012-02-03 87 views
0

有幾個類似的問題,但它們看起來不一樣,所以在這裏呢?當Firefox返回false時,Javascript AJAX調用失敗;

我有一個網站,我有一個登錄表單。我想使用ajax來調用一個php函數,而一切工作正常。在firefox中,當我點擊登錄按鈕觸發logIn()javascript函數時,我被重定向到javascript:logIn()頁面,它是白色的,並且只是說false。如果我在logIn()方法中刪除了返回false,它似乎工作正常。

<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方法被發現如下:

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

這是非常傳統的代碼,因此完全回答有點困難。

爲了一起破解事情,我會改變你的行動= onsubmit =。 「行動」不是爲此而設計的。

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

onsubmit中的返回false將阻止頁面發佈。請確保你注意到它是返回 logIn()的結果,在你的情況下它總是爲false。

你也可以這樣做:

onsubmit="logIn(); return false;" 

,並刪除返回從您的登錄功能錯誤。

注意:默認情況下,ajax調用是異步的。

+0

感謝您的建議,我確實嘗試了使用onsubmit,但關於它的其他內容破壞了,我將不得不再次嘗試。你能否更多地解釋爲什麼代碼是非常規的。還有,最好使用return false或e.preventDefault(); – Nath5 2012-02-03 04:24:05

+0

@ Nath5 - 個人而言,我認爲最好讓所有的事件處理程序都不在標記和代碼中。 – 2012-02-03 16:48:48

0

由於您已經在使用jQuery,因此如果用戶禁用了JavaScript,爲什麼不將action-attribute設置爲登錄用戶的頁面,然後添加一些自動綁定提交按鈕以使用您的logIn() - 功能

像這樣的東西可能會工作(沒有測試它,但它應該工作):

//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">