将php关联数组从函数返回到ajax调用,使用json_encode()而不是对象

时间:2016-11-30 00:34:23

标签: javascript php jquery ajax

这是我的第一篇文章,所以如果我留下一些东西或者不能很好地解释自己,我会道歉。所有这些代码都在同一个php文件中

我的ajax电话

$.ajax(
{
    type: "POST",
    url: window.location.href,
    data: {func: 'genString'},
    datatype: 'json'
})
.done(function ( response )
{
    console.log( response );
    console.log( repose.string );
});

属于页面上的if语句

if ( isset ($_POST['func'] && $_POST['func'] == 'genString')
{
     exit(json_encode(myFunction()));
}

该功能在页面上运行

function myFunction()
{
    /* Would generate a string based on the database */
    $arr = array('rows' => 1, 'string' => 'My test string');
    // Changes values in the array depending on the database
    return $arr;
}

运行此函数以在加载页面本身时生成数组并使用字符串部分显示它,并使用行部分设置浏览器中文本区域的高度但是当调用ajax时 console.log(respose)此日志 {"rows":1,"string":"My test string"}代替对象

然而,当我尝试记录或使用字符串时 console.log( response.string ); 它显示为未定义

我以前做过这个并且已经工作并返回了一个对象,我可以在response.string的js中使用它。我试图使用JSON_FORCE_OBJECT这对结果没有影响

2 个答案:

答案 0 :(得分:2)

现在,响应只是被视为字符串(数据类型)。这就是response.string无效的原因。

您可以通过添加以下内容来说明:

console.log( typeof response );

所以不要忘了把:

header('Content-Type: application/json');

在你if区内:

您在if区块(isset和response)上输入了拼写错误:

if ( isset ($_POST['func']) && $_POST['func'] === 'genString' ) {
    header('Content-Type: application/json');
    exit(json_encode(myFunction()));
}

关于JS拼写错误:

console.log( response.string );
               ^^

答案 1 :(得分:0)

嗯,这是一个语法错误。 请求选项

datatype: 'json' 

应该是

dataType: 'json'