Ext JS и PHP Ошибка загрузки и разбора файла - PullRequest
0 голосов
/ 11 октября 2010

Я пытаюсь загрузить текстовый файл с более чем одной записью, но получаю ошибку синтаксиса (). Реализованная логика работает нормально, если в файле есть только одна запись . Может быть проблема в том, что я повторяю несколько записей в цикле foreach?

Описание:

Ext JS-интерфейс, где пользователь просматривает файл. Как только файл выбран, он загружается на сервер и анализируется в PHP. Разобранный процесс называется processFile который вызывается файлом js.

Что я заметил

  1. Реализованная логика работает нормально, если в файле только одна запись .
  2. Формат JSON правильный.
  3. Если файл содержит 3 записи, четвертая BLANK-запись все еще читается.

При этом код PHP:

<?php

$action = $_REQUEST['action'];
if ($action == 'uploadFile') {
  $fileName = $_FILES['file']['tmp_name'];
  $fileContent = file_get_contents($fileName);
  $fileInfo = parseFile($fileContent); //custom formatting 
    echo wrap_answer(array(
    'originalFile' => $fileContent,    
    'fileInfo' => $fileInfo,
    'success' => true
    ));  
}

if ($action == 'processFile') {
  $fileContent = $_REQUEST['file'];
  $fileInfo = parseFile($fileContent);  

  foreach($fileInfo['lines'] as $line) {        
    $input = array(
            'id' => $line['id'],
            'name' => $line['name']);              
    //custom function to insert records from file into clients table
    //function returns the inserted records ID  
    $insert_id = handler_Insert('clients',$input);    

    $success = ($insert_id == null || $insert_id == 0)?false:true;
    echo json_encode(array(
    'success' => $success)
    );    
    //NOTE:Processing records 1 by 1 and echoing the result
    //     Could this be the error? Any suggestions to better
    //     handle this process?
  }
}

Любая помощь, предложения и т. Д. Высоко ценится! Спасибо

1 Ответ

0 голосов
/ 11 октября 2010

решаемые

Мне пришлось переписать мой код, чтобы вернуть только ОДНУ строку json с несколькими записями как это:

 //new variable to hold all array elements
    $rows = array();
    //In the foreach loop push the array item on $rows
    array_push($rows,array(
      'success' => $success,
      'record' => $input));    

    } //end of foreach loop
      echo json_encode(array(
      'id' => 'clients',
      'rows' => $rows));
   }//end of processFile function

Тогда в моем js-файле все, что мне нужно было сделать, - это просмотреть результат, используя Ext.each, как это:

loadClient:function(result){
      var records = result.rows; //rows[0]{id,name},rows[1]      
      console.log(records);
      Ext.each(records,this.processKey,this);
    },
processKey:function(item,itemIndex){
      if(item.success){
         alert('Record inserted!');
      }
      else{
         alert('Failed to insert record');
      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...