php文件I / O和ajax的问题

时间:2013-05-01 19:34:59

标签: jquery file-io php polling

我正在尝试使用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按预期工作。此外,轮询确实频繁地调用服务器。有关修复此问题的建议吗?如果您需要更多信息,请询问。谢谢!

1 个答案:

答案 0 :(得分:2)

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。如果被卡住,请使用。