所以我想将一个json发送到一个ajax调用,但我不知道如何在发送时读取json。而且由于反斜杠,我的json看起来很奇怪......
这是我的ajax:
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);
答案 0 :(得分:4)
正如 techierishi 的回答所述。不要对您的回复进行两次编码。只是做
echo $result;
JSON应该有效并解析,为什么?
json_encode
用于从MySQLi查询返回的有效PHP数组。dataType
,明确强制jQuery到JSON.parse
响应,并且在该过程中没有出现错误。返回的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
答案 1 :(得分:4)
你应该做的第一个改变: 您不需要编码两次
$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);
}