2016-11-01 83 views
0

一個JavaScript代碼使用的「地圖」對象上的陣列的方法,以僅提取文本值:laravel陣列路由動作

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

此數組串被髮送到使用AJAX一個Laravel路線(與Vue的HTTP)

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

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

    }, (response) => { 

    }); 

凡this.el.action是API/taxonomytospecies /和相應的路線爲:

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

而且裏面TaxonomyController:

public function getSpeciesFromTaxonomy($ids) { 

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

1)是否有更好的方式來傳遞像我從javascript代碼獲取值的數組(他們有很多的字符串)到控制器的路線?

2)我得到一個內部500錯誤。錯誤顯示呼叫是這樣的:

API/taxonomytospecies/1,名稱2,名稱3,名稱4,NAME5

但我不知道如何解決這種錯誤

回答

0

我會建議由於數據很大,因此您使用post請求而不是get

您可以將數據作爲數組發送到服務器。

var data = {ids: checked_leaves}; 

然後在你的post請求發送data變量。

在你的控制器,你可以得到的數據爲:

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

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

,然後選擇路線應儘可能:

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

我試過你的解決方案。如果我輸出一個console.log(數據)輸出是正確的;但一旦我打到ajax請求:this.vm. $ http.get(this.el.action + data).then((response)...服務器響應500內部錯誤。我嘗試瞭解決方案用POST(把{ids}作爲Route definiton中的一個參數,並用GET解決方案。顯然Vue文件的開頭已經有X-CSRF-TOKEN的頭文件了。 –

+0

它是否有效? –

+0

否,它沒有。 –

0

解決的辦法是設置路線爲:

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

並且Vue資源請求爲:

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

但我不明白爲什麼。