2017-08-14 59 views
0

好吧,我有一個表單,您可以選擇一個CSV文件,當您點擊sales_importer按鈕時,我想讓我的java調用我的php函數並獲取返回的多維數組,然後再進行處理。當我運行下面的代碼時,我得到了一個多維數組值的警告框,但它看起來像是字符串形式。當我做alert(result[0][0]);時,我在我的警報框中獲得[Ajax發送FormData並檢索多維數組

我已經嘗試在我的ajax調用中更改我的dataType到json,但然後它只是失敗,但我仍然從我的瀏覽器得到200響應。有關可能會發生什麼/如何解決它的任何建議?

JS

$('body').on('click', '#sales_importer', function() { 
    $.ajax({ 
     type: 'POST', 
     data: new FormData($('form[id="import_form"]')[0]), 
     cache: false, 
     contentType: false, 
     processData: false, 
     url: admin_url+'Clients/import', 
     success: function(result){  
      alert(result);      
     } 
    }); 
}); 

PHP

public function import() 
{ 
    if ($this->input->is_ajax_request()) { 
     if (isset($_FILES['client_file_csv']['name']) && $_FILES['client_file_csv']['name'] != '') {    
      // Get the temp file path 
      $tmpFilePath = $_FILES['client_file_csv']['tmp_name']; 
      // Make sure we have a filepath 
      if (!empty($tmpFilePath) && $tmpFilePath != '') { 
       // Setup our new file path 
       $newFilePath = TEMP_FOLDER . $_FILES['client_file_csv']['name']; 

       if (!file_exists(TEMP_FOLDER)) { 
        mkdir(TEMP_FOLDER, 777); 
       } 
       if (move_uploaded_file($tmpFilePath, $newFilePath)) { 
        $import_result = true; 
        $fd   = fopen($newFilePath, 'r'); 
        $rows   = array(); 
        while ($row = fgetcsv($fd)) { 
         $rows[] = $row; 
        } 
        $data['total_rows_post'] = count($rows); 
        fclose($fd);       

        echo json_encode($rows); 
       } 
       unlink($newFilePath); 
      } 
     } 
    } 
} 
+0

您可以嘗試序列化並將$ rows的內容記錄到服務器,以便檢查響應中返回的內容。 –

+0

@BrianGottier當我將響應序列化到日誌時,這是響應的開始。一:520:{I:0;一個:16:{I:0; S:10: 「公司」; I:1; S:11: 「PHONENUMBER」; I:2; S:8: 「main_fax」; I:3; S:13: 「vehiclenumber」; I:4; S:4: 「城市」; I:5; S:5: 「狀態」; I:6; S:7: 「地址」; I: 7; s:6:「縣」; i:8; s:3:「zip」; i:9; s:7:「網站」; i:10; s:13:「代理狀態」; i:11 ; s:16:「內部銷售代表」; i:12; s:17:「外部銷售代表」; i:13; s:5:「註釋」; i:14; s:21:「其他機構評論」 ;我:15; S:10:「記錄ID#」;} –

+0

我不知道我,A和S是什麼,但CSV的第一行確實說:公司,電話號碼,main_fax,vehiclenumber等。如果我打印它json_encoded與序列化我得到:[[「\ ufeffcompany」,「phonenumber」,「main_fax」,「vehiclenumber」,「城市」,「州」,「地址」,「縣」,「郵編「,」網站「,」代理機構狀態「,」內部銷售代表「,」外部銷售代表「,」註釋「,」其他機構評論「,」記錄ID#「]等。 –

回答

1

如果你希望能夠在JavaScript中使用的數據,那麼你將需要應用的關鍵。因此,在你的PHP:

echo json_encode(array('rows' => $rows)); 

現在,這可以讓你訪問你的jQuery AJAX成功函數行:

success: function(result){  
    // rows available as result.rows 
    if(result.rows){ 
     // Do something with result.rows... 
     console.log(result.rows); 
     $.each(result.rows, function(i, arr){ 
      console.log(arr); 
     }); 
    }      
} 

記住result.rows將是一個JavaScript對象,所以你」將需要使用jQuery的每個循環遍歷行,並做你想做的事情。使用你的控制檯查看result.rows,你會明白我的意思。

+0

當我這樣做,我什麼也沒有寫在控制檯。如果我添加了'else {console.log(「no」);}'我在控制檯中得到了「no」,所以看起來好像沒有在result.rows中獲取任何東西。 –

+0

是否move_uploaded_file實際上將文件保存到$ newFilePath? –

+0

是的,我甚至檢查了新的文件路徑,文件就在那裏。我甚至將數組吐出一個視圖並可以看到數據。整個ajax交易有一些奇怪的事情發生。 –