代码之家  ›  专栏  ›  技术社区  ›  khaled amoudi

使用AJAX和Laravel导入Excel文件

  •  0
  • khaled amoudi  · 技术社区  · 2 年前

    我正试图在我的应用程序中使用AJAX和Laravel导入一个Excel文件。excel导入的表单是一个内部表单(另一个表单中的表单)错误处理似乎部分有效,但错误消息并不总是正确显示在前端。

    我的JAVASCRIPT代码:

    $(document).ready(function() {
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $('#submitUnits').on('click', function(e) {
            e.preventDefault();
    
            var formData = new FormData();
            formData.append('unitsFile', $('#unitsFile')[0].files[0]);
            formData.append('buildingId', $('#buildingId').val());
    
            var buildingId = $('#buildingId').val();
            $.ajax({
                url: '/building-units-import/' + buildingId,
                type: 'POST',
                data: formData,
                processData: false,
                contentType: false,
                success: function(response) {
    
                    console.log('successsss:' + response.errors);
    
                    $('#errorMessages').empty();
    
                    if (response.errors && response.errors.length > 0) {
                        $('#errorTable').show();
                        $.each(response.errors, function(index, error) {
                            var row = $('<tr>').appendTo('#errorMessages');
                            row.append($('<td>').text(error.row));
                            row.append($('<td>').text(error.message));
                        });
                    } else {
                        $('#errorTable').hide();
                        alert('File imported successfully.');
                    }
                },
                error: function(xhr) {
                    console.log("error:" + xhr);
                }
            });
        });
    });
    

    导入Excel文件后: 在控制台中,它显示如下: error:[object Object]

    在网络预览中:显示422个错误代码和实际Excel错误: {message: "القيمة المحددة 2.العقار غير موجودة. (و 6 أخطاء إضافية)",…} errors : [["There was an error on row 2. القيمة المحددة العقار غير موجودة."],…] 0 : ["There was an error on row 2. القيمة المحددة العقار غير موجودة."] 1 : ["There was an error on row 3. القيمة المحددة العقار غير موجودة."] 2 : ["There was an error on row 2. القيمة المحددة نوع الوحدة غير موجودة."] 3 : ["There was an error on row 3. القيمة المحددة نوع الوحدة غير موجودة."] 4 : ["There was an error on row 2. القيمة المحددة الطابق غير موجودة."] 5 : ["There was an error on row 3. القيمة المحددة الطابق غير موجودة."] 6 : ["There was an error on row 3. حقل عقد الدفاع المدني غير موجود."] message : "القيمة المحددة 2.العقار غير موجودة. (و 6 أخطاء إضافية)"

    但我想在成功的案例中得到这些错误的回应。

    这是我的控制器端点:

        public function import_building_units(Request $request, $building_id)
    {
        $request->validate([
            'unitsFile' => 'required|file|mimes:xlsx,xls,csv', // Use 'unitsFile' as per your form field name
        ]);
    
    
        // Access the uploaded file directly
        $file = $request->file('unitsFile');
    
        $import = new BuildingUnitsImport($building_id);
        Excel::import($import, $file);
    
        $errors = $import->getErrors();
    
        if (empty($errors)) {
            // Import successful, return appropriate response
            return response()->json(['success' => 'File imported successfully']);
        } else {
            // Import failed, return detailed error messages
            return response()->json(['errors' => $errors]);
        }
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Ohgodwhy    2 年前

    以下行:

    $request->validate([
        'unitsFile' => 'required|file|mimes:xlsx,xls,csv', // Use 'unitsFile' as per your form field name
    ]);
    

    将抛出 ValidationException 。然后,这将被捕获并根据请求类型(在您的情况下为XHR)返回,错误代码为 422 .

    如果您想更改此行为,请捕获异常并自己返回。

    try {
        $request->validate([
            'unitsFile' => 'required|file|mimes:xlsx,xls,csv', // Use 'unitsFile' as per your form field name
        ]);
    } catch (ValidationException $ex) {
        return response()->json(['errors' => $ex->errors()->all()]);
    }