PHP+Javascript解析这两个响应


PHP + Javascript parse both responses

我有两个问题。一个完全使用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,我想再次解析信息。

我做错了什么?谢谢

编辑1alert(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在评论中指出的那样。由于键中有尾随冒号,所以这不起作用,但使用字符串键访问数据仍然有效。