使用jQuery从PHP文件返回JSON数据

时间:2012-02-08 21:36:11

标签: php jquery mysql json

长期读者,第一次海报。我对jQuery和JSON这个世界很陌生,并且已经看到了我正在运行的登录脚本的问题。

最终目标是从表单中捕获数据,将该数据传递给PHP文件以通过jQuery.ajax()发布进行处理,将数据与MySQL数据库进行比较以进行身份​​验证并返回数据以确保成功失败

我的问题是我无法将JSON格式的数据从PHP脚本传递回jQuery。在使用Chrome的开发人员工具查看处理时,我看到了“登录失败”。我通过将它扔到我的error_log文件中来仔细检查数组$ rows,并返回格式正确的JSON,但我不能在我的生命中让它返回到jQuery文件。任何帮助表示赞赏。

我的表单输入:

<!-- BEGIN: Login Page -->
    <section data-role="page" id="login">
        <header data-role="header" data-theme="b">
            <a href="#landing" class="ui-btn-left">Back</a>
        <h1>Please Log In</h1>
        </header>
        <div data-role="content" class="content" data-theme="b">
            <form id="loginForm" action="services.php" method="post">
                <div data-role="fieldcontain">
                    <label for="schoolID">School ID</label>
                    <input type="text" name="schoolID" id="schoolID" value=""  />

                    <label for="userName">Username</label>
                    <input type="text" name="userName" id="userName" value=""  />

                    <label for="password">Password</label>
                    <input type="password" name="password" id="password" value=""  />

                    <h3 id="notification"></h3>
                    <button data-theme="b" id="submit" type="submit">Submit</button>
            <input type="hidden" name="action" value="loginForm" id="action">
                </div>
            </form>
        </div>
        <footer data-role="footer" data-position="fixed" data-theme="b">
            <h1>Footer</h1>
        </div>
    </section>
    <!-- END: Login Page -->

我的jQuery处理程序:

// Listen for the the submit button is clicked, serialize the data and send it off
    $('#submit').click(function(){
        var data = $("#loginForm :input").serializeArray();
    var url = $("#loginForm").attr('action');

    $.ajax({
        type: 'POST',
        url: url,
        cache: false,
        data: data,
        dataType: 'json',
            success: function(data){
            $.ajax({
                type: 'GET',
                url: "services.php",
                success: function(json){
                alert(json);
                $('#notification').append(json);
                }
            });
            }
        });
    });

这是我的PHP处理:

if (isset($_POST['action'])) {
    $schoolID = $_POST['schoolID'];
    $userName = $_POST['userName'];
    $password = $_POST['password'];

    $sql = "SELECT FirstName, LastName, FamilyID, StudentID, UserID ";
    $sql .= "FROM Users ";
    $sql .= "WHERE SchoolID = '$schoolID' ";
    $sql .= "AND Username = '$userName' ";
    $sql .= "AND Password = '$password'";
    $rs = mysql_query($sql);

    $rows = array();
    while($row = mysql_fetch_array($rs, MYSQL_ASSOC)) {
        $row_array['firstName'] = $row['FirstName'];
        $row_array['lastName'] = $row['LastName'];
        $row_array['familyID'] = $row['FamilyID'];
        $row_array['studentID'] = $row['StudentID'];
        $row_array['userID'] = $row['UserID'];
        array_push($rows, $row_array);
    }

    header("Content-type: application/json", true);
    echo json_encode(array('rows'=>$rows));
    exit;

    }else{

    echo "Login Failure";
    }

3 个答案:

答案 0 :(得分:4)

看看你在这里犯了什么错误很简单

 $.ajax({
    type: 'POST',
    url: 'services.php',
    cache: false,
    data: $('#loginForm').serialize(),
    dataType: 'json',
        success: function(data){
            alert(data);
            $('#notification').append(data);
        }
    });
});

使用jquery的serialize函数。当你有一个成功函数参数时,它不是你在这个指令中的'数据'

data : data,

从php结束返回它是成功返回的新数据。为避免冲突,请使用new_data

之类的其他内容
    success: function(new_data){
        alert(new_data);
        $('#notification').append(new_data);
    }

新数据采用json格式检查。如果你使用的是firefox,请使用console.log查看firebug。

    success: function(new_data){
        console.log(new_data);
        alert(new_data);
        $('#notification').append(new_data);
    }

答案 1 :(得分:0)

尝试更改:

var data = $("#loginForm :input").serializeArray();

为:

var data = $("#loginForm").serialize();

这应该可行,因为我非常确定.ajax请求中的“数据”应该是序列化字符串,serializeArray返回一个对象数组。

http://api.jquery.com/serialize/

http://api.jquery.com/serializeArray/

编辑1:

这看起来像是一个事件冒泡问题。请尝试以下方法:

将您的javascript更改为:

function processForm(formObj) {
    var $form = $(formObj);
    var data = $form.serializeArray();
    var url = $form).attr('action');

    $.ajax({
        type: 'POST',
        url: url,
        cache: false,
        data: data,
        dataType: 'json',
        success: function(data){
            $('#notification').append(data);
        }
    });

    return false;
}

你的表格:

<form id="loginForm" action="services.php" method="post" onsubmit="return processForm(this)">
    <div data-role="fieldcontain">
        <label for="schoolID">School ID</label>
        <input type="text" name="schoolID" id="schoolID" value=""  />

        <label for="userName">Username</label>
        <input type="text" name="userName" id="userName" value=""  />

        <label for="password">Password</label>
        <input type="password" name="password" id="password" value=""  />

        <h3 id="notification"></h3>
        <button data-theme="b" id="submit" type="submit">Submit</button>
        <input type="hidden" name="action" value="loginForm" id="action">
    </div>
</form>

答案 2 :(得分:0)

简单回答:用户错误。我没有真正理解getJSON()函数的概念。它旨在将数据发送到PHP脚本,并在成功时处理返回数据。我假设它需要一个函数来发送信息和一个函数来检索信息。

感谢您的帮助!