从PHP更新DIV标记

时间:2017-02-21 13:14:41

标签: javascript php jquery html ajax

我是新开发者。我已经阅读了很多关于我的主题的问题,我看到了很多有趣的答案,但不幸的是,我找不到解决我的问题的方法。 我有一个简单的HTML格式和<div id="comment"></div>(如果没有任何内容传递给用户,则为空)。这个DIV应该为用户提供更新,例如Wrong Username or Password!。该表单通过PHP和MySQL处理。

    ...
    $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正在处理表单...

你能帮忙吗?

提前致谢! :)

2 个答案:

答案 0 :(得分:3)

为了让AJAX工作,PHP必须从AJAX调用中返回echo

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

答案 1 :(得分:0)

首先,假装使用Ajax将表单数据发送到PHP。所以你的客户端(HTML)必须通过Ajax完全通信。进行身份验证后,您需要发送一个&#34; Ajax sign&#34;给客户。

    $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

最后,你必须检查&#34; Ajax标志&#34;在您的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();
});