2016-11-01 2 views
0

ein JavaScript-Code „map“ -Methode auf Array von Objekt verwendet nur den Textwert zu extrahieren:Laravel Array von Zeichenketten zu routen Aktion

var checked_leaves = checked_ids.filter(function(elm) { 
     if (elm.children.length == 0) 
      return elm;  
     }).map(function(elm, index) { 
      return elm.text.trim(); 
     }); 

Dieses Array von Zeichenfolge wird an einen Laravel Route gesendet Ajax (mit Vue http)

this.vm.$http.get(this.el.action + checked_leaves).then((response) => { 

     console.log(response); 
     //this.vm.speciesDetails = JSON.parse(response.data); 

    }, (response) => { 

    }); 

Wo die this.el.action ist api/taxonomytospecies/und die entsprechende Strecke ist:

Route::get('api/taxonomytospecies/{ids}', '[email protected]'); 

Und innen TaxonomyController:

public function getSpeciesFromTaxonomy($ids) { 

    // Eloquent job to retrieve the data from the DB 
} 

1) Gibt es einen besseren Weg, um ein Array von Werten, wie ich sie aus dem JavaScript-Code bekommen passieren (sie sind viele Strings) auf einer Strecke von einem Controller?

2) Ich bekomme einen internen 500 Fehler. Der Fehler zeigt, dass der Anruf wie:

api/taxonomytospecies/name1, name2, name3, name4, name5

Aber ich weiß nicht, wie diese Art von Fehler zu beheben

Antwort

0

würde ich vorschlagen Sie verwenden post Anfrage anstelle von get, da die Daten groß sind.

Sie können Daten als Array an den Server senden.

var data = {ids: checked_leaves}; 

Dann data Variable in Ihrer post Anfrage senden.

In Ihrem Controller können Sie Daten wie erhalten:

public function getSpeciesFromTaxonomy() { 
    $ids = request()->get('ids') // returns an array. 

    // Eloquent job to retrieve the data from the DB 
} 

Und Ihre Route sollte so sein:

Route::post('api/taxonomytospecies', '[email protected]'); 
+0

Ich habe Ihre Lösung versucht. Wenn ich eine console.log (Daten) ausgabe, ist die Ausgabe korrekt; aber sobald ich die ajax anfrage: this.vm. $ http.get (this.el.action + data) .dann ((response) ... antwortet der server mit einem 500 internen fehler. ich habe beide lösungen ausprobiert mit POST (wegnehmen der {ids} als Parameter in der Route definiton und der Lösung mit GET. Es gibt anscheinend schon eine Kopfzeile für das X-CSRF-TOKEN am Anfang der Vue-Datei. –

+0

Hat es funktioniert? –

+0

Nein –

0

Die Lösung, die die Route festgelegt ist als:

Route::get('api/taxonomytospecies/', '[email protected]'); 

Und die Vue-Ressourcenanforderung als:

this.vm.$http.get(this.el.action, {params: { ids: checked_leaves } }).then((response) => { 

aber ich verstehe nicht warum.