php 文件 I/O 和 ajax 的问题

Posted

技术标签:

【中文标题】php 文件 I/O 和 ajax 的问题【英文标题】:Problems with php File I/O and ajax 【发布时间】:2013-05-01 19:34:59 【问题描述】:

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

【问题讨论】:

硬编码发送到 PHP 的数据并直接在浏览器中访问。这样您就可以查看是否是问题所在。 我知道它是正确的,但问题是检查文件是否不存在。我知道它现在不存在,所以它无法打开。我需要安全地检查文件是否打开,如果没有(它有问题或不存在)然后返回 json 说这样。不过现在,php 完全失败了,因此不会返回 json。 【参考方案1】:
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。如果卡住了,请使用它。

【讨论】:

查看文件是否存在修复它!非常感谢!

以上是关于php 文件 I/O 和 ajax 的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在不修改脚本的情况下计算 PHP 脚本的文件读取和写入?

从引导模式以 PHP 和 Ajax 上传文件

使用 Ajax 和 PHP 上传音频文件

Ajax - 通过 ajax 将输入文件和附加变量发送到 php 文件

NodeJS中的异步I/O事件驱动

如何使用带有 json 和 php 的 jquery 的 $.ajax 函数上传文件