2016-12-29 6 views
1

このJavaScriptオブジェクトをクエリ文字列に送信して、サーバーが受信したときにオブジェクトとして使用できるようにしたいとします。クエリ文字列にjavascriptオブジェクトを送信するにはどうすればよいですか?

 const xhr = new XMLHttpRequest(); 
     var params = { 
      searchParams: {name: 'Joe'}, 
      sortParam: {name: -1}, 
      skip: 0, 
      limit: 50 
     }; 
     xhr.open('get', '/api/endpoint' + formatParams(params)); 
     xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
     xhr.responseType = 'json'; 
     xhr.addEventListener('load',() => { 
      if (xhr.status === 200) { 
       ... 
      } 
      else{ 
       ... 
      } 
     }); 
     xhr.send(); 

formatParams機能は次のとおりです。:現在、私はXHRリクエストを使用しています

私はパラメータがその後に使用されているExpressのルータを介して要求を受け付けておりますサーバー上
const formatParams = (params) => { 
    return "?" + Object 
      .keys(params) 
      .map(function(key){ 
       return key+"="+params[key] 
      }) 
      .join("&") 
}; 

MongoDBのクエリは:

const express = require('express'); 
const router = new express.Router(); 
router.get('/endpoint', (req, res) => { 
    console.log(req.query.searchParams); 
    ... 
}); 

現在、サーバーは、文字列としてreq.query.searchParamsを示している

[オブジェクトのオブジェクト]

+0

'はconsole.log(JSON.stringify(req.query.searchParams))何であるか;'示します? –

+1

また、このようなパラメータはフォーマットしないでください。それらはURLエンコードされる必要があります。 jqueryを使用する場合は、jquery.paramsメソッドを使用します。これは重労働です。 –

+0

オブジェクトをJSONに変換する必要があります。これは、ネイティブオブジェクトのtoStringメソッドを使用しています。 – ste2425

答えて

1

ここにいくつかの問題があります。

  1. keyparams[key]はURLエンコードする必要があり、このためにencodeURIComponent(...)を使用することができます(それは標準機能です)
  2. params[key]は2つのケース(searchParam、sortParam)のオブジェクトであるため、文字列の表示は[Object object]になります。代わりにしてみてください:return encodeURIComponent(key) + '=' + encodeURIComponent(JSON.stringify(params[key]))
  3. サーバー側では、あなたはおそらく戻ってあなたのオブジェクトを取得するにはJSON.parse(req.query.searchParams)を実行する必要が
+0

華麗な - ありがとう! – JoeTidee

関連する問題