У меня есть URL-адрес, который я создаю следующим образом:

let forwardBaseUrl = 'https://www.usergems.com/api/gmail/info?' + $.params({
                event: 'Click forwarded link',
                email: btoa(userEmail),
                properties: {
                    forwardId: btoa(forwardId)
                }
            });

Есть ли простой способ позже добавить свойство к объекту свойств: мне нужен такой же результат, как этот:

let forwardBaseUrl = 'https://www.usergems.com/api/gmail/info?' + $.params({
                event: 'Click forwarded link',
                email: btoa(userEmail),
                properties: {
                    forwardId: btoa(forwardId),
                    forwardUrl: 'http://google.at'
                }
            });

Лучше всего было бы решение, объединяющее параметры. Подобно этому (очевидно, не работает):

forwardBaseUrl.params.push({properties: { forwardUrl }})
0
Chris 3 Июл 2017 в 19:20
ForwardBaseUrl + = "& forwardUrl =" + "google.at"
 – 
Jonas Wilms
3 Июл 2017 в 19:29

2 ответа

Во-первых, фактический метод JQuery - $.param() . а не $.params().

Затем, если вы проведете рефакторинг своего кода, чтобы «построить» объект «params» и настроить функцию, которая может добавить свойство к вашему объекту, вы можете в любое время повторно сгенерировать сериализованный результат:

var userEmail = "me@you.com";
var forwardId = "12345";

var props = {
    forwardId: btoa(forwardId)
};

var paramObj = {
  event: 'Click forwarded link',
  email: btoa(userEmail),
  properties: props
};

let forwardBaseUrl = 'https://www.usergems.com/api/gmail/info?' + $.param(paramObj);

console.log(forwardBaseUrl);

function changeProperties(prop, value, addRemove){
    if(addRemove){
      // Add new property to properties object
      props[prop] = value;
    } else {
      // remove property from properties object
      delete props[prop];
    }
}

// Add a new property to the params "properties" object:
changeProperties("forwardUrl", "http://google.at", true);

// Update serialized params
forwardBaseUrl = 'https://www.usergems.com/api/gmail/info?' + $.param(paramObj);

console.log(forwardBaseUrl);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
1
Scott Marcus 3 Июл 2017 в 19:41
var restObj = {
  url: 'https://www.usergems.com/api/gmail/info?'
  params: {
     event: 'Click forwarded link',
     email: 'asda',
     properties: {
        forwardId: btoa('asd')
     }
  },
  getUrl: function () {
    return this.url + $.param(this.params);
  }
}

// теперь вы можете изменить объект params restObj.params.properties.anotherParam = 'param';

// и получаем новый url console.log (restObjgetUrl.)

0
qiAlex 3 Июл 2017 в 19:37