2013-05-01 1 views
0

Я пытаюсь опросить с помощью ajax и php для приложения Im writing. Php по существу получает стробированный объект для вставки в файл, который можно прочитать позже. У меня есть запись на объекты, которые работают нормально. Проблема, которую я имею прямо сейчас, заключается в том, что если php пытается прочитать файл, который не существует, он, похоже, возвращает код ошибки в вызов $ .post(). Я хочу, чтобы он возвращал JSON, и успех, так что я могу обрабатывать немного по-другому.Проблемы с php File I/O и ajax

РНР в вопрос заключается в следующем:

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

+0

Я знаю, что это правильно, но проблема в том, что проверка не существует. Я знаю, что этого не существует в это время, поэтому он не может открыть. Мне нужно безопасно проверить, открывается ли файл, если нет (у него была проблема или не существует), а затем верните json, говорящий о таком. Однако сейчас php просто проваливается, и поэтому json не возвращается. – samuraiseoul

ответ

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)); 
    } 
} 

Я пробовал свой код с использованием постоянной константы, и он работал. Если все еще сталкиваются с оберткой обертывания «fopen» в блоке try-catch. В другом случае проверьте настройки пути. Используйте firebug, чтобы увидеть фактический JS сгенерированный.use, если он застрял.

+0

Увидеть, сохранился ли файл! Благодаря тонну! – samuraiseoul