2016-07-07 62 views
0

我一直在閱讀有關類似情況的多線程,但即使現在我仍然無法正確地做到這一點。ajax表單提交 - >從PHP接收響應

我想做什麼 基本上,即我有允許用戶更改他的登錄(簡單地查詢數據庫)的形式。 PHP腳本看起來像這樣:

if(isset($_POST['login'])) { 
     $doEdit = $user->editData("login", $_POST['login']); 
     if($doEdit) { 
      $result = displayInfobox('success', 'Good!'); 
     } else { 
      $result = displayInfobox('warning', 'Bad!'); 
     } 
    } else { 
     $error = 'Bad!'; 
     echo $error; 
    } 

displayInfobox僅僅是一個類,即成功和內容DIV - 好!

現在我想通過AJAX發送這個表單,並顯示$ result而不重新加載頁面。

HTML:

<form id="changeLogin" method="post" class="form-inline" action="usercp.php?action=editLogin"> 
     <label for="login">Login:</label><br /> 
     <div class="form-group "> 
      <input type="text" class="form-control" name="login" id="login" required> 
      <input type="submit" value="Zmień" class="btn btn-primary"> 
     </div> 
    </form> 

而finnally - 我的jQuery/AJAX:

$("#changeLogin").submit(function(e) { 

    var postData = $(this).serializeArray(); 
    var formURL = $(this).attr("action"); 
    $.ajax({ 
    url: formURL, 
    type: "POST", 
    data: postData, 
    success: function(result) { 
     alert(result); 
    }, 
    error: function(response) {} 
    }); 
    e.preventDefault(); 
}); 

$("#changeLogin").submit(); 

如果我走了 「成功」 的空白,它的工作原理 - >形式是通過AJAX提交,登錄已更改,但我看不到結果消息。否則整個頁面會重新加載。另外,當我打F5時,表單再次被提交(即使是在Ajax中)。

+0

是第二個$(「#changeLogin」)。submit();'在你的代碼中? – Jeff

+0

也不需要在html-form中定義'action',然後從那裏抓取它。將它留空並將網址設置爲js。 – Jeff

回答

1

我不能添加評論,因爲我沒有足夠的聲譽,但...

你應該刪除與$("#changeLogin").submit();

然後在你的PHP腳本文件的最後一行,應該回送的結果,所以你可以在ajax請求中獲得這個結果。之後,在你的成功方法你必須閱讀結果和(例如)將它追加到某處顯示成功或錯誤框

+0

謝謝!這是否過濾了結果,它似乎工作。只是無法弄清楚如何正確使用filter() - >結果是在某個類的div中,當我過濾它時,我得到了div的內容,而不是整個div的類。 – ficus

0

我認爲你可以使用一個正常的按鈕,而不是提交按鈕,只需onclick可以是ajax要求,表格不應該提交,祝你好運。