2013-05-01 35 views
0

我試圖用ajax和php輪詢應用程序林書寫。 PHP本質上接收一個字符串化的對象放入一個文件中,以後可以讀取。我寫的對象工作得很好。我現在的問題是,如果PHP試圖讀取一個不存在的文件,它似乎會返回一個錯誤代碼給$ .post()調用。我希望它能夠返回JSON和成功,以便我可以處理有點不同。問題與PHP文件I/O和ajax

有問題的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按預期工作,否則。此外,輪詢確實是按照應該的頻率調用服務器。有關修復此問題的任何建議如果您需要更多信息,請直接詢問。謝謝!

+0

硬編碼您發送給PHP的數據並直接在瀏覽器中訪問它。這樣你可以看到這是否是問題。 – Jordan 2013-05-01 19:37:37

+0

我知道它傳遞的是正確的,但問題是檢查文件是否不存在。我知道它現在不存在,所以它不能打開。我需要安全地檢查文件是否打開,如果沒有(它有問題或不存在),然後返回json這樣說。但現在,php只是失敗了,所以json不會返回。 – samuraiseoul 2013-05-01 20:02:54

回答

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 generated.use,如果stucked。

+0

看看文件是否存在修復它!萬分感謝! – samuraiseoul 2013-05-01 20:51:39