2017-02-10 4 views
0

Я пытался создать страницу загрузки для веб-приложения. Для отправки файлов на сервер я хочу использовать AJAX, поскольку я использую AJAX GET для всего интерфейса.Laravel 5.2 - метод [ajax] не существует

Моя проблема заключается в том, что при попытке использовать POST в данных обстоятельствах я предоставит вам мгновение, я получаю сообщение об ошибке «Метод [ajax] не существует».

Мой маршрут (СТОЛБ один):

Route::group(['prefix' => 'organisatie', 'middleware' => ['web', 'auth', 'ajax'], 'namespace' => 'Organisatie'], function() 
{ 
    Route::group(['prefix' => '{organisatie}/documenten'], function() 
    { 
     Route::get('/', '[email protected]')->name('drive.index'); 
     Route::post('/upload', '[email protected]')->name('drive.upload'); 
    }); 
}); 

Маршрут сведется к organisatie/{organisatie_id}/documenten/upload.

Мои [email protected]:

public function upload(Request $request) 
{ 
    $file = $request->file('file[]'); 

    return response()->json($file); 
} 

Мой AJAX код:

var formData = new FormData(); 

utility.foreach(upload.fileArray.array, function (file) { 
    formData.append('file[]', file); 
}); 

var ajax = { 
    url: '/organisatie/1/documenten/upload', 
    type: 'POST', 
    data: formData, 
    dataType: 'JSON', 
    processData: false, 
    success: function (data) { 
     console.log(data); 
    } 
}; 

$.ajax(ajax); 

Примечание:

  • utility.foreach моя собственная реализация Еогеасп, и это делает только что.
  • upload.fileArray - это оболочка массива, которую я определил и работает как ожидаемый .
  • Заполнение upload.fileArray работает отлично и проверено. Он заселен от input[type=file] (multiple)'s FileList.

Любая помощь приветствуется. Пожалуйста, спросите, что-то неясно.

+0

Правильно ли установлено ваше промежуточное ПО ajax? – Neat

+0

Ваша проблема заключается в '$ .ajax (ajax);' потому что вы, вероятно, не включили jQuery (соответственно). http://api.jquery.com/jquery.ajax/ –

+0

попробуйте выполнить поиск в источнике страницы после загрузки страницы, чтобы найти библиотеку jQuery, которую вы включили, и вставьте ее здесь. например, я использую '' – Onix

ответ

0

Спасибо за помощь. Ответ Нита вдохновил меня проверить мой маршрут, и оказалось, что вы должны использовать ?ajax=functionName на маршрутах POST. В моем случае:

Маршрут:

Route::post('/', '[email protected]')->name('drive.upload.post'); 

AJAX:

var ajax = { 
    url: '/organisatie/1/documenten?ajax=upload', <--- '/upload' to '?ajax=upload' 
    type: 'POST', 
    data: formData, 
    dataType: 'JSON', 
    processData: false, 
    success: function (data) { 
     console.log(data); 
    } 
}; 

с [email protected] -> [email protected]

По некоторым причинам я не мог найти этот ответ в любом месте, так что я надеюсь, что это поможет кому-то ,

+0

Для некоторых это может показаться очевидным, но для меня это заняло много времени, прежде чем я понял, в чем проблема, поэтому, надеюсь, это поможет кому-то, кто слишком долго не кофе. – Jarinus

Смежные вопросы