2014-03-27 72 views
25

我意識到,從根本上講,我可能會以這種錯誤的方式進行討論,所以我願意向任何正確的方向努力。將JavaScript對象轉換爲URL參數

我試圖使用HipChat API將通知發送到一個房間,像這樣:

https://www.hipchat.com/docs/api/method/rooms/message

我試圖建立與JS對象的參數例子中的URL,所以基本上我試圖將其轉換:

var hipChatSettings = { 
      format:"json", 
      auth_token:token, 
      room_id: 1, 
      from: "Notifications", 
      message: "Message" 
     } 

要這樣:

https://api.hipchat.com/v1/rooms/message?format=json&auth_token=token&room_id=1&from=Notifications&message=Message

+0

的可能的複製[如何將對象序列化到的參數列表?(https://stackoverflow.com/questions/6566456 /如何將對象序列化爲參數列表) –

回答

39

您應該檢查這個jQuery.param function

var params = { width:1680, height:1050 }; 
 
var str = jQuery.param(params); 
 
console.log(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

(我應該說我正在使用jQuery,但是你明顯地讀到了我的想法):) – user2865446

+4

他didn沒有讀懂你的想法。就Stack Overflow而言,當你詢問關於JavaScript的東西時,即使你明確地說你不想要jQuery的答案,你也會得到九十個jQuery答案。在將來您需要非jQuery JavaScript答案時,請記住這一點。 ;) – L0j1k

31
Object.keys(hipChatSettings).map(function(k) { 
    return encodeURIComponent(k) + "=" + encodeURIComponent(hipChatSettings[k]); 
}).join('&') 
// => "format=json&auth_token=token&room_id=1&from=Notifications&message=Message" 

警告:newish JavaScript。如果你想讓它在古人上工作,可以填寫或改寫成for

9

像這樣的東西可能會爲你工作

var str = "?" + Object.keys(hipChatSettings).map(function(prop) { 
    return [prop, hipChatSettings[prop]].map(encodeURIComponent).join("="); 
}).join("&"); 

// "?format=json&auth_token=token&room_id=1&from=Notifications&message=Message" 

如果你不能依靠的ECMAScript 5,你可以使用一個簡單的for循環

var pairs = []; 

for (var prop in hipChatSettings) { 
    if (hipChatSettings.hasOwnProperty(prop)) { 
    var k = encodeURIComponent(prop), 
     v = encodeURIComponent(hipChatSettings[prop]); 
    pairs.push(k + "=" + v); 
    } 
} 

var str = "?" + pairs.join("&"); 
+2

我喜歡這個答案。對於ES6,你可以稍微調整一下'function makeParams(params)=> {return params? '?' + object.keys(params).map((key)=>([key,params [key]]。map(encodeURIComponent).join(「=」)))。join(「&」):''}'你可以將它追加到你的路徑中,'path + makeParams(params)',它處理undefined,null和{}' – jlyonsmith

-5

嘗試用這種方法:

public static SerializeParams<T>(Datos: T): string { 
      var keys = Object.keys(Datos); 
      var stringParams: string = "?"; 
      for (var i in keys) { 
       var name = keys[i]; 
       if (i == 0) 
        stringParams += name + "=" + JSON.stringify(Datos[name]); 
       else 
        stringParams += "&" + name + "=" + JSON.stringify(Datos[name]) 
      } 
      return stringParams; 
     }; 
+0

你的方法簽名看起來不像JavaScript? – Bergi