繁体   English   中英

Ajax发送FormData并检索多维数组

[英]Ajax send FormData and retrieve multidimensional array

好的,所以我有一个表单,您可以在其中选择一个CSV文件,并且当您单击sales_importer按钮时,我希望Java调用php函数并获取返回的多维数组,然后再进行后续处理。 当我运行以下代码时,我会收到带有多维值数组的警报框,但看起来它是字符串形式的。 当我做alert(result[0][0]); 我在警报框中收到[

我已经尝试将我的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);
            }
        }
    }
}

如果您希望能够使用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的each来遍历行并执行所需的操作。 使用控制台查看result.rows,您将明白我的意思。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM