dongxing2692 2012-11-16 21:48
浏览 349
已采纳

result.success失败的ajax调用

My code run's through fine but fails when it gets to the success call. On the ajax section "if (result.success){" it shows an error in the browsers sources tab with result being null.

Login Page:

<form id="login_form_header">
    <input type="hidden" name="action" value="sc_ajax_callback" />
    <input type="hidden" name="func" value="sc_login" />

    Email:
    <input type="text" name="username" />

    Password:
    <input type="password" name="password"/>

    <input type="submit" value="Log in" />
</form>
<script>
$("#login_form_header").submit(function(event){

    event.preventDefault();

    $.ajax({
        type: 'post',
        url: '<?php echo get_stylesheet_directory_uri(); ?>/connect.php',
        data: $('#login_form_header').serialize(),
        dataType: 'json',
        success: function(result){
            if (result.success){
                window.location = "my-dashboard/";
                return false;
            };
        },
        error: function(e){console.log("Could not retrieve login information")}
    });

    return false;
});
</script>

Connect Page:

<?php 

    mysql_connect("localhost", "%user%", "%pass%") or die(mysql_error()); // Connect to database server(localhost) with username and password.
    mysql_select_db("%db%") or die(mysql_error()); // Select registration database.
    # Make sure form data was passed to the script
    if(isset($_POST['username']) && !empty($_POST['username']) AND isset($_POST['password']) && !empty($_POST['password'])){

    # Define Variables
    $active_var = "1";
    $given_username = mysql_escape_string($_POST['username']);
    $given_password = dosomethingtopass;
    $matched_username = "";
    $matched_password = "";

     # See if there is matching info in the database
    $sql = 'SELECT username, password, active FROM %table% WHERE username="'.$given_username.'" AND password="'.$given_password.'" AND active="'.$active_var.'"'; 
    $result = mysql_query($sql);
    while($row = mysql_fetch_assoc($result)){
    if($given_password == $row['password']){
        $matched_username = $row['username'];
        $matched_password = $row['password'];
        }
    };

    # If there was a match 
    if($matched_username != "" && $matched_password != ""){
        #If there is only one result returned
        echo json_encode(array("$matched_password"));
        $session_sql = 'SELECT id, username, password, last_login FROM %table% WHERE username="'.$matched_username.'" AND password="'.$matched_password.'"';
        $session_result = mysql_query($session_sql);
        while($returned_row = mysql_fetch_assoc($session_result)){
            if($matched_password == $returned_row['password']){ 


            $_SESSION['id'] = $returned_row['id'];
            //$_SESSION['last_login'] = $returned_row['last_login'];
            $_SESSION['username'] = $returned_row['username'];
                }
             }

            $date = date('Y-m-d H:i:s');
            $update_sql = "UPDATE %table% SET last_login='".$date."'";
            mysql_query($update_sql);

        echo json_encode(array("success"=>"user logged in", "session"=>$_SESSION));
        }
    }

?>

Also the update_sql is updating every row in my table kinda odd. Not sure where I am going wrong any help?

EDIT:

Updated

   $.ajax({
        type: 'post',
        url: '<?php echo get_stylesheet_directory_uri(); ?>/connect.php',
        data: $('#login_form_header').serialize(),
        dataType: 'json',
        success: function(result){

                window.location = "my-dashboard/";

            };
        },
        error: function(e){console.log("Could not retrieve login information")}
    });

展开全部

  • 写回答

2条回答 默认 最新

  • drc15469 2012-11-16 22:10
    关注
    success: function(result){
                if (result.success){
                    window.location = "my-dashboard/";
                    return false;
                };
    

    change to

    success: function(result){                    
                        window.location = "my-dashboard/";                     
                    }
    

    result here is te data sent by the server, not an object.


    Also the update_sql is updating every row in my table kinda odd

    It is because there is no WHERE clause in your UPDATE query.

    From the documentation:

    The WHERE clause, if given, specifies the conditions that identify which rows to update. With no WHERE clause, all rows are updated.

    More info here

    EDIT after update

    you have an extra };.

    change

    success: function(result){
    
                    window.location = "my-dashboard/";
    
                };
            },
    

    to

    success: function(result){
    
                    window.location = "my-dashboard/";
    
    
            },
    

    A few point worth to mention:

    • Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks will be deprecated in jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

    • mysql_* functions are being deprecated. Use PDO instead.

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部