我有两个问题。一个完全使用PHP,另一个使用Javascript。但在我想要得到的东西上,两者都是平等的。
index.php
$.ajax({
type: "post",
url: "insert_info.php?type=info",
data: { array : all },
success: function(data) {
alert(data);
// Returns: {'status':1}
// I want to get "1"
// data[0] -> doesn't work
}
});
insert_info.php
// Connects to another file
include_once('verify_info.php');
$verify = new verify_info();
$arr = array("status:" => 1);
$extension = $verify->verify_file($_REQUEST['array'][9]);
if($extension[0] == 0){
$arr = array("status:" => 0);
}
echo json_encode($arr);
verify_info.php
public function verify_file($file){
$extensions = array('jpg', 'png', 'jpeg', 'bmp');
$info = pathinfo($file);
$arr = array();
if(!in_array($info['extension'], $extensions)){
$arr = array("status:" => 0);
}else{
$arr = array("status:" => 1);
}
return $arr;
}
在insert_info.php中,我想通过$extension[0]获取从函数verify_file()检索到的状态;
之后,我将值输出为json_encode到Javascript,我想再次解析信息。
我做错了什么?谢谢
编辑1:alert(data.status);
也不起作用。
编辑2:alert(data.status);
永远不会工作,因为我回显了{'status:', 1}
(中间两点有问题)解决javascript问题的正确方法:
var obj = jQuery.parseJSON(data);
alert(data.status);
我仍在努力修复php。
编辑3:全部解决。谢谢大家。
public function verify_file($file){
$extensions = array('jpg', 'png', 'jpeg', 'bmp');
$info = pathinfo($file);
if(!in_array($info['extension'], $extensions)){
return false;
}
return true;
}
正如我在评论中所说,您将PHP中的键设置为"status:"
是否需要键末尾的尾随冒号?我认为这没有必要,PHP数组已经提供了获取它们的机制,并且您的JSON将在不处理字符串的情况下包含字符串,因此一旦您访问JS代码,您的密钥仍然是"status:"
,而很可能是"status"
。
不管你是否会做出这种改变,都不会破坏任何东西。正如@charlietfl所指出的,在您的Javascript代码中,您应该将返回的dataType
设置为"json"
,这样您的JS Ajax调用将如下所示:
$.ajax({
type: "post",
url: "insert_info.php?type=info",
data: { array : all },
dataType: "json",
success: function(data) {
// Assuming no change on the backend
alert(data["status:"]);
}
});
然而,如果您更改了字符串以删除冒号,那么访问数据的状态元素将是data.status
,正如@A.Wolff在评论中指出的那样。由于键中有尾随冒号,所以这不起作用,但使用字符串键访问数据仍然有效。