2012-11-17 353 views
2

我的代码运行良好,但在成功调用时失败。在ajax节“if(result.success){”它显示浏览器源选项卡中的错误,结果为空。result.success在Ajax调用中失败

登录页面

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

连接页面

<?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)); 
     } 
    } 

?> 

另外,update_sql正在更新在我的表中的每一行有点儿奇怪。不知道我去哪里错了任何帮助?

编辑:

更新

$.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")} 
    }); 

回答

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

变化

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

result这里是服务器,而不是一个对象发送TE数据。


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

这是因为在你的UPDATE查询没有WHERE条款。

从文档:

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

更多信息here

编辑更新

后,你有一个额外};

变化

success: function(result){ 

       window.location = "my-dashboard/"; 

      }; 
     }, 

success: function(result){ 

       window.location = "my-dashboard/"; 


     }, 

几个点值得一提:

  • 弃用通知:jqXHR.success(),jqXHR.error()和jqXHR.complete()回调将在jQuery 1.8中被弃用。要准备代码以便最终删除它们,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

  • mysql_ *函数被弃用。改用PDO。

0

就试试这个:

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

因为这个函数调用成功的结果。 第一个参数是来自服务器答案的数据。这不是对象。 你能在那里找到细节:http://api.jquery.com/jQuery.ajax/

+0

更新了这个问题,它有点作用,但现在我在控制台中得到“Uncaught SyntaxError:Unexpected token;”。 – shayward

+0

从您的更新代码中删除此字符串:'};' – newman