duanjia2772
2012-03-13 19:25
浏览 66

jQuery AJAX与PHP通过JSON返回(登录表单)

I don't know what I do wrong..

I have 2 files: login.php index.php

<script type="text/javascript">  
$(document).ready(function(){  
$('#btnLogin').bind('click', loginToWebsite);
});
function loginToWebsite(){
     $.ajax({  
     url: "login.php",
      type: "POST",  
      data: "username=" + $("#username").val()+"&password=" + $("#password").val(),
    datatype:"json",
      success: function(status)
      {  
        if(status.success == false) 
        {  
            $("#loginform").effect("shake", {times:2}, 100); 
            $("#login_message")  
                .attr('class', 'ui-state-error')  
                .html('<strong>ERROR</strong>: Your details were incorrect.<br />');  
        } 
        else { 
                 $("#login_message")  
                .attr('class', 'ui-state-highlight')  
                .html('<strong>PERFECT</strong>: You may proceed. Good times.<br />');  
            }  
      }  
    });  
} 
</script> 

login.php gile looks this way:

<?php
if (isset($_POST['username'])&& isset($_POST['password']))
{
    if (login ($_POST['username'], $_POST['password'])){
        $data = array("success" => true);
        echo json_encode($data);
    }
    else {
        $data = array("success" => false);
        echo json_encode($data);
    }
}?>

But i get undefined back from login.php (via json)

If I try to alert(status.success) it prints undefined

And I can see i the header that the username and password are getting send to the login.php page.

The PHP function login() is implemented elsewhere (and returns true or false)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • dongshuo6185 2012-03-14 15:53
    已采纳

    It seems the value pass to javascript through variable "status" is a string. So you have to convert the string to json object. To convert string to json object use following script. Use the latest jquery library because older one using different functions to convert string to json.

    
        var obj = jQuery.parseJSON(status);
        alert(obj.success);
    
    
    点赞 打赏 评论
  • douyi4297 2012-03-13 19:35

    I guess that you have something bad in your php script output, and it cannot be parsed as json.

    1. Try to use some debugging web proxy (http://www.charlesproxy.com/ for example, there is a free demo)

    2. Add console trace to see the data

      success: function(status) { console.log(status); // ... function body }

    点赞 打赏 评论
  • dsc6517 2016-01-14 11:57

    Your code in php file is incorrect

        if login = false 
    {
    $data['success'] = false;
    echo json_encode($data);
    }
    else {
    $data['success'] = true;
    echo json_encode($data);
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题