Javascript Ajax读取PHP生成的json
所以我想向ajax调用发送一个json,但我不知道在发送时如何读取json。而且我的json看起来很奇怪,因为反斜杠 这是我的ajax:Javascript Ajax读取PHP生成的json,javascript,php,ajax,json,Javascript,Php,Ajax,Json,所以我想向ajax调用发送一个json,但我不知道在发送时如何读取json。而且我的json看起来很奇怪,因为反斜杠 这是我的ajax: function find(){ var type = $('#object_type').val(); $.ajax({ type : 'POST', url : 'get_user.php', data : {
function find(){
var type = $('#object_type').val();
$.ajax({
type : 'POST',
url : 'get_user.php',
data : {
'type' : type
},
dataType : 'json',
error : function(response){
alert('SOMETHING WENT WRONG');
},
success : function(response){
This is what I get as a response:
"[{\"name\":\"Test\",\"link\":\"test.php\"},{\"name\":\"Test2\",\"link\":\"test2
.php\"}]"
}
});
}
这是我的PHP函数:
$type = $_POST['type'];
$user_array;
$user = mysqli_query($conn, "SELECT name,link FROM user WHERE `type` LIKE '%".$type."%'") or die();
while ($row = mysqli_fetch_array($user, MYSQLI_ASSOC)) {
$row_array['name'] = $row['name'];
$row_array['link'] = $row['link'];
array_push($user_array, $row_array);
}
mysqli_close($conn);
$result = json_encode($user_array, 128);
echo json_encode($result);
如techierishi的答复所述。不要对你的回答进行两次编码。照办
echo $result;
JSON应该是有效的并被解析,为什么
json_encode用于从MySQLi查询返回的有效PHP数组。
使用dataType,显式地强制jQuery解析响应,并且在该过程中不会出现任何错误。
返回的JSON具有以下结构
ROOT
ARRAY
ARRAY OBJECT
OBJECT PROPERTY
要解决类似的问题:
root[array index].property
将为您提供数组的值,它是一个对象。该对象具有多个属性
[]表示阵列
{}表示对象
所以[{name:value 1},{name:value 2}]实际上是
ARRAY
[0].name = value 1
[1].name = value 2
因此,从JSON中检索名称等信息将是:
response[0].name; // = test
您应该做的第一个更改: 您不需要编码两次
$result = json_encode($user_array, 128);
echo json_encode($result);
应该是
$result = json_encode($user_array, 128);
echo $result;
现在的反应应该是
[{"name":"Test","link":"test.php"},{"name":"Test2","link":"test2
.php"}]
这是一个有效的Javascript数组,可以使用以下代码访问:
var len = response.length;
for(i=0;i<len;i++){
console.log(response[i].name);
console.log(response[i].link);
}
这个回答可能是正确的。但它是这样呈现的。如果您在浏览器中查看开发工具F12,您可以在“网络”选项卡中看到实际的响应文本。Mah我不知道它是否真的存在,我了解到此反斜杠可能会导致问题..而且无论如何,我不知道如何访问json中的数据..尝试在成功函数中执行此操作,看看它是否有效:alertresponse[0].name我使用FireBug,HTML中的响应与我在问题中所写的响应相同。除了手头的主要问题之外,您可能应该添加内容类型标题“content-type:application/json”;。虽然不是必需的,但最好明确说明这一点。有关更多详细信息,请参阅…如果我执行var name=response[0]。name;然后alertname,我得到了UndefinedSee Techierishi的答案和我对答案所做的适当编辑。