2017-02-21 72 views
0

我是一名新開發人員。我已經閱讀了很多關於我的主題的問題,並且我看到了很多有趣的答案,但不幸的是,我找不到解決方案。 我有一個簡單的HTML格式和<div id="comment"></div>(如果沒有任何東西要傳遞給用戶,則爲空)。這DIV應該給用戶更新,如Wrong Username or Password!時,情況。表單通過PHP和MySQL進行處理。從PHP更新DIV標籤

... 
    $result = mysqli_query($idConnect, $sql); 

    if (mysqli_num_rows($result) > 0) { 

     mysqli_close($idConnect); 
     setCookie("myapp", 1, time()+3600 * 24 * 60); //60 days 
     header("Location: ../main.html"); 
    } else { 
     //Please update the DIV tag here!! 
    } 
    ... 

我試圖從jQuery的(使用AJAX)「讀」 PHP,但我是否沒有解決,或者不能那麼做......我jQuery的使用這個(#login是形式的)姓名:

$("#login").submit(function(e){ 
    var postData = $(this).serializeArray(); 
    var formURL = $(this).attr("action"); 
    $.ajax({ 
     url : formURL, 
     type: "POST", 
     data : postData, 
     success:function(data) { 
      $("#comment").replaceWith(data); // You can use .replaceWith or .html depending on the markup you return 
     }, 
     error: function(errorThrown) { 
      $("#comment").html(errorThrown); 
     } 
    }); 
    e.preventDefault(); //STOP default action 
    e.unbind(); 
}); 

,但我想用一些消息來更新DIV標籤#comment如果證書是錯誤的。但我不知道如何更新DIV,考慮到PHP的處理形式...

你能幫忙嗎?

在此先感謝! :)

+0

所以服務器與有效負載細節返回一個錯誤。在JavaScript中閱讀它們 – epascarello

+2

[您是否觀看過瀏覽器開發工具中的AJAX請求/響應?你有沒有在項目中包含jQuery庫?是否有任何錯誤報告?你是一個網絡服務器上運行嗎?(http://jayblanchard.net/basics_of_jquery_ajax.html) –

+3

當你解決這個問題,下一個問題將是你不能做一個'header'在PHP重定向當你打電話給你使用ajax的腳本。相反,您應該將狀態發送回您的腳本(使用json,因爲您還需要發回數據)並從javascript進行重定向。 – jeroen

回答

3

爲了讓AJAX工作,PHP必須echo東西從AJAX調用返回:

if (mysqli_num_rows($result) > 0) { 

     mysqli_close($idConnect); 
     setCookie("myapp", 1, time()+3600 * 24 * 60); //60 days 
     echo 'good'; 
    } else { 
     //Please update the DIV tag here!! 
     echo 'There is a problem with your username or password.'; 
    } 

但是因爲使用該功能,這將不會在error: function顯示當AJAX本身有問題。本文將在成功回調退還,所以你必須有更新的div:

success:function(data) { 
     if('good' == data) { 
      // perform redirect 
      window.location = "main.html"; 
     } else { 
      // update div 
      $("#comment").html(data); 
     } 
    }, 

此外,由於你調用AJAX的PHP中,header("Location: ../main.html");將無法​​正常工作。您需要將window.location添加到取決於狀態的成功回調中。

+0

謝謝你的回答! – EricF

0

要開始,你假裝是使用Ajax表單數據發送到PHP。所以你的客戶端(HTML)必須通過Ajax完全通信。在進行身份驗證後,您需要向客戶端發送「Ajax簽名」。

$result = mysqli_query($idConnect, $sql); 

    if (mysqli_num_rows($result) > 0) { 

     mysqli_close($idConnect); 
     setCookie("myapp", 1, time()+3600 * 24 * 60); //60 days 
     echo 'true';//it's better for using json format here 
     // Your http header to redirect won't work in this situatition 
     // because the process is control by javascript code. Not PHP. 
    } else { 
     echo "false";//it's better for using json format here 
    } 
    //the result is either true or false, you can use json to send more details for client used. Example: "{result:'false', message:'wrong username'}"; 
    // use PHP json_encode(Array(key=>value)) to convert data into JSON format 

最後,你有你的js代碼來檢查「阿賈克斯的標誌」:

$("#login").submit(function(e){ 
    var postData = $(this).serializeArray(); 
    var formURL = $(this).attr("action"); 
    $.ajax({ 
     url : formURL, 
     type: "POST", 
     data : postData, 
     success:function(data) { 
      // You can use `data = JSON.parse(data)` if the data format is JSON 
      // Now, data.result is available for your checked. 
      if (data == 'true') 
        window.location.href = "main.html"; 
      else 
        $("#comment").html('some message if the credentials are wrong'); 
     }, 
     error: function(errorThrown) { 
      $("#comment").html('Other error you get from XHTTP_REQUEST obj'); 
     } 
    }); 
    e.preventDefault(); //STOP default action 
    e.unbind(); 
});