我试图通过以下方式获取来自php的数据:
echo json_encode($rows);
当我注释掉数据类型时:' json'我可以看到正常编码的json字符串,但是当我使用它时,alert会显示我的对象数组。当我试图获得该对象数组的长度时,我得到1,但它应该超过20个项目。我尝试在这里做搜索帖子并尝试通过json迭代不同的东西,但由于某些原因,这些都不适用于我。我正在使用
mysqli_set_charset($connect, "utf8");
在php端的select语句之前。这是我的ajax电话:
function search() {
$.ajax(
{
url: "getFiles.php",
dataType: 'json',
type: "POST",
data: {Filter: $("#txtSearch").val()},
cache: false,
async: false,
success: function(data)
{
var jsonData = JSON.parse(data);
alert(data);
$.each(data, function(index, val)
{
alert(val.iddocuments);
alert(val.docName);
alert(val.fileName);
alert(val.fl1);
alert(val.dateModified);
});
}
});
}
答案 0 :(得分:1)
问题出在PHP方面,你使用了json_encode():
http://php.net/manual/en/function.json-encode.php
引用函数定义:“string json_encode(mixed $ value [,int $ options = 0 [,int $ depth = 512]])”,以下内容:
<?php
echo "Associative array always output as object: ", json_encode($d), "\n";
echo "Associative array always output as object: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>
将输出:
Associative array always output as object: {"foo":"bar","baz":"long"}
Associative array always output as object: {"foo":"bar","baz":"long"}
JSON_FORCE_OBJECT(整数) 使用非关联数组时,输出对象而不是数组。当输出的接收者期望一个对象并且该数组为空时特别有用。从PHP 5.3.0开始提供。
类似的“速记”版本将是:
json_encode($d, true);
还值得一提的是,您应该在回显输出数据之前设置正确的输出标题:
header('Content-Type: application/json');
最终,如果你使用的是PHP 5.4或更新版本(你应该),那么实现JsonSerializable Interface是最好的选择,因为它允许从JSON角度更灵活地表示您的数据。
答案 1 :(得分:1)
问题可能在于您序列化为json格式的数组结构。检查PHP中的var_dump($rows)
以查看确切的结构,此结构应与客户端上使用的结构相匹配(在JavaScript代码中)。
在客户端,您可以进行一些调试,以便在console.log(data)
函数中查看您正在接收的内容的结构,例如调用success
。
在任何情况下,在服务器端,您必须添加标头header('Content-Type: application/json');
,并在客户端添加dataType: 'json',
,以便jQuery知道如何解析数据并使您可以作为JavaScript数组使用。< / p>