2017-02-10 4 views
0

Ich habe versucht, eine Upload-Seite für eine Webapplikation zu erstellen. Zum Senden der Dateien an den Server möchte ich AJAX verwenden, da ich AJAX-GETs für das gesamte Front-End verwendet habe.Laravel 5.2 - Methode [Ajax] existiert nicht

Mein Problem ist, dass, wenn Sie versuchen, POST zu verwenden, unter den Umständen, die ich Ihnen in einem Moment liefern werde, die Fehlermeldung "Methode [Ajax] existiert nicht".

Meine Route (die POST eins):

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'); 
    }); 
}); 

Der Weg zum organisatie/{organisatie_id}/documenten/upload kommen würde.

Mein [email protected]:

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

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

Mein AJAX-Code:

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); 

Hinweis:

  • utility.foreach meine eigene foreach-Implementierung ist, und es tut nur dass.
  • upload.fileArray ist ein Array-Wrapper ich definiert und es funktioniert wie erwartet.
  • Bestücken der upload.fileArray funktioniert gut und ist getestet. Es ist von input[type=file] (multiple)FileList besetzt.

Alle und alle Hilfe wird geschätzt. Bitte fragen Sie, wenn etwas unklar ist.

+0

Ist Ihre Ajax-Middleware richtig eingerichtet? – Neat

+0

Ihr Problem liegt bei '$ .ajax (ajax);' weil Sie wahrscheinlich jQuery (correcly) nicht enthalten haben. http://api.jquery.com/jquery.ajax/ –

+0

Versuchen Sie in Ihrer Seitenquelle nach dem Laden der Seite zu suchen, um die jQuery-Bibliothek zu finden, die Sie einschließen, und fügen Sie sie hier ein. zum Beispiel benutze ich '' – Onix

Antwort

0

Danke für die Hilfe. Neats Antwort inspirierte mich, meine Route zu überprüfen, und es schien, dass Sie immer noch ?ajax=functionName auf POST-Routen verwenden sollten. In meinem Fall:

Route:

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); 
    } 
}; 

mit [email protected] -> [email protected]

Aus irgendeinem Grund ich diese Antwort nirgends finden konnte, so dass ich hoffe, dass dies jemand hilft .

+0

Dies scheint für einige offensichtlich, aber für mich dauerte es eine Menge Zeit, bis ich herausgefunden habe, was das Problem war, also hoffentlich hilft das jemand, der ohne Kaffee ein wenig zu lange war. – Jarinus