Ext JS和PHP文件上传和解析错误

时间:2010-10-11 10:55:09

标签: php javascript ajax extjs weblogic

我正在尝试上传一个包含多条记录的文本文件,但我一直收到一个syntax()错误。 如果文件中只有一条记录,则实现的逻辑可以正常工作。 可能问题是我在foreach循环中回显了多个记录吗?

说明

Ext JS接口,用户浏览文件。一旦选择了文件,它就会上传到服务器并在PHP中解析。解析过程称为processFile 这是由js文件调用的。

我注意到了

  1. 如果文件中只有一条记录,则实施的逻辑可以正常工作。
  2. json格式是正确的。
  3. 如果文件包含3条记录,则仍会读取第四条BLANK记录。
  4. 以下是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 :(得分:0)

<强>解决

我不得不重写我的代码,只返回一个包含多条记录的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');
      }
}