首页 > 解决方案 > PHP没有将变量返回给ajax调用

问题描述

我有一个 ajax 请求,并且无法正确返回 JSON 响应以进行后续处理。

在下面的 PHP 代码中,$unameExists 返回 true 或 false,但是当我将其发送回 JS 成功例程时,console.log(data.unameExists); 返回未定义。因此,我的 if/else 语句正确执行。

HTML

    <input type="text" name="username" id="username" value="<?php echo $this->username;?>" class="middle" />

JS

$('#username').on('blur', function() {
    $.ajax({
        url: "?module=Iders&controller=index&action=check_user",
        data: { 'username' : $('#username').val() },
        type: "POST",
        dataType: 'json',
        success: function(data, unameExists) {
            console.log(data.unameExists);
            console.log(unameExists);
            if(data.unameExists === 'true') {
                alert('Username is NOT available!');
            }
            else {
                alert('Username is available!');
            }
        },
        error: function(data){
            //error
        }
});

PHP

public function check_userAction() {
    $username = trim($_REQUEST['username']);
    $unameExists = Users_Model_Users::isExistUsername($username);
    echo $this->renderScript('json', unameExists);
}

标签: javascriptphpjqueryjson

解决方案


阅读手册会有所帮助:http: //api.jquery.com/jquery.ajax/

您没有按照 jQuery 的预期使用回调参数。第一个成功回调参数是从服务器返回的完整数据。它是一个字符串或某种对象,基于dataType.

由于您没有设置dataType,jQuery 会猜测返回的内容,并且可能会直接解析为 JSON blob。

使用以下console.log()语句检查data-argument 的内容。

success: function(data) {
    /* When your PHP script returns a variable that is encoded into JSON: */
    console.log(data.unameExists);

    /* In all other cases check the `data` arguemtn directly: */
    console.log(data);
},

推荐阅读