2017-08-30 16 views
0

のArrayを使用して、私はAPIの呼び出しは、URLパラメータがlanguages=1&languages=2&...GETリクエスト

どのように私はJavaScriptでこれを達成することができますように、このlanguages = [1,2,3,4,5]

のように見える配列を期待していますか?

私はJSON.stringify(languages); &をちょうどlanguages変数を送信しようとしましたが、希望の結果が得られません。

また、配列全体をループして、常に&languages=numberを文字列に追加することもできますが、より効率的な方法があると思いましたか?あなたが整数ではない他のparamsを扱う場合(@Quentinと@Amitコメントごとなど)Array.prototype.join

var languages = [2,4,6,8] 
 

 
lang_params = 'languages='+languages.join('&languages=') 
 

 
console.log(lang_params)

を使用して、事前

+0

より効率的な方法は、POSTまたはPUT呼び出し経由で配列を送信することです.. –

+0

@ MaanusIndovそれは何かの要求なら、それはGETでなければなりません。それはわかりませんが、確かにそれはそうです。 – Archer

+0

@Archerまあ、データを取得するようにリクエストしてもGETを使うのは良いことですが、使用する必要があるというルールはありません リクエストの内容がわからない簡単に更新や保存の呼び出しでも、いくつかの項目やその言語、削除する言語の削除呼び出しでも、オプションは無制限です:) –

答えて

5

おかげで別のオプションは、特別なシンボル(すなわち、&?)を妨げないように値をエンコードする必要があるかもしれません。このような場合、あなたはきれいにこのケースを処理しますencodeURI

lang_params = languages.map((l)=>'languages='+encodeURIComponent(l)).join('&') 
+0

right @Quentinはそのケースを示すために答えを編集しました – jperelli

+0

"cleaner"バージョンは 'languages.map(lang => 'languages =' + lang).join( '&')'になります。しかし、大したことはありません... – Amit

+0

Thanks @Amit、編集済みの回答は、2番目の部分であなたの提案に一致する – jperelli

2

URISearchParams APIを使用することができます。

また、値やキーのURLを安全にするために必要なデータのエスケープも行います(特定の例ではこれは問題ではありませんが、一般的なケースでは注意が必要です)。

// Create an object to describe the data in the query string 
 
var query = new URLSearchParams(); 
 

 
// Add the languages 
 
var languages = [1,2,3,4,5] 
 
languages.forEach(function (language) { 
 
    query.append("language", language); 
 
}); 
 

 
// Explicitly convert to a string 
 
console.log(query.toString());

注意がlimited browser support at presentがあるので、あなたはおそらくa polyfillを使いたいでしょう。