我正在尝试用ajax和php为我写的一个应用程序投票。php本质上是接收一个字符串化的对象,然后放入文件中,以便稍后读取。我对对象的写入工作得很好。我现在遇到的问题是,如果php试图读取一个不存在的文件,它似乎会向$.post()调用返回一个错误代码。我希望它返回JSON,并成功,这样我可以处理的是有点不同。
所讨论的php如下:
public function read(){
$id = $this->input->post('id');
$test = fopen("./meetings/".$id.".mt", 'r');
if(!$test){
error_log("Unable to open file, you mutt!");
echo json_encode(array('status' => "FAIL"));
}else{
error_log("Here! 2");
$obj = array();
while(!feof($test)){
error_log("Here! 3");
$tmp = fgets($test);
error_log("Here! 4");
if($tmp){
$obj[count($obj)] = $tmp;
}
}
fclose($test);
error_log("Here! 5");
if(!count($obj) > 0){
echo json_encode(array('status' => "FAIL"));
}
echo json_encode(array('status' => 'OKAY', 'obj' => $obj));
}
}
和Javascript(使用jquery)如下:
function read(){
$.post('<?php echo base_url(); ?>meetings/read', {id: <?php echo $id;?>}, function(json){
console.log(json.status);
if(json.status == 'OKAY'){
for(var i = 0 ; i < json.obj.length ; i++){
parseObject(json.obj[i]);
}
}
}, 'json');
}
javascript没有到达成功函数,我使用ajaxError()
检查,但我不知道如何解决这个问题,甚至为什么php正在发送错误,因为我认为我正在检查它。否则,php将按预期工作。而且,轮询确实会尽可能频繁地调用服务器。有什么建议解决这个问题吗?如果你需要更多的信息,请问我。谢谢!
public function read(){
$id = $this->input->post('id');
/* changes */
$path = "./meetings/".$id.".mt";
if (!file_exists($path)){
echo json_encode(array('status' => "FAIL"));
return;// this exit from here and go to js file
}
/* changes ends */
$test = fopen($path, 'r');
if(!$test){
error_log("Unable to open file, you mutt!");
echo json_encode(array('status' => "FAIL"));
}else{
error_log("Here! 2");
$obj = array();
while(!feof($test)){
error_log("Here! 3");
$tmp = fgets($test);
error_log("Here! 4");
if($tmp){
$obj[count($obj)] = $tmp;
}
}
fclose($test);
error_log("Here! 5");
if(!count($obj) > 0){
echo json_encode(array('status' => "FAIL"));
}
echo json_encode(array('status' => 'OKAY', 'obj' => $obj));
}
}
我试过你的代码使用固定常数,它工作。如果仍然面临错误,在try-catch块中包装'fopen'。在其他情况下,检查路径设置。使用firebug查看实际生成的JS。