Вызовите любой веб-сервис из того же вызова $ .ajax () - PullRequest
1 голос
/ 28 апреля 2010

Я создаю usercontrol, который контролируется на стороне клиента, к нему привязан javascript-файл. У этого элемента управления есть кнопка, и при нажатии появляется всплывающее окно, в котором отображается список объектов моего домена. Мои объекты извлекаются с помощью вызова веб-службы.

Я пытаюсь заставить этот всплывающий пользовательский контроль работать на всех моих сущностях, поэтому мне нужно вызвать любой необходимый веб-сервис (по одному на сущность, например) с тем же вызовом $ .ajax ().

У меня есть скрытые поля для URL веб-службы в моем пользовательском контроле, который вы указываете в разметке через свойство. Все идет нормально. Проблема возникает, когда мне нужны дополнительные параметры для веб-службы (кроме pageize и pageindex). Скажем, например, что один веб-сервис принимает дополнительный параметр «Дата».

На данный момент мои параметры настроены так:

    var params = JSON.stringify({
        pageSize: _this.pageSize,
        pageIndex: _this.pageIndex            
    });

и тогда я вызываю веб-сервис так:

$.ajax({
    webserviceUrl,
    params,
    function(result) { 
          //some logic
    });
});

То, что я хочу сделать, - это иметь возможность добавлять мои дополнительные параметры (Date) к «Param», когда это необходимо, спецификация этих параметров будет выполняться через свойства usercontrol.

Итак, суть в том, что у меня есть набор параметров по умолчанию, и я хочу динамически добавлять необязательные дополнительные параметры.

Как это возможно?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Я знаю, что это не будет быстро, но что-то вроде

var params;
function buildJsonParams(defaultParam1, defaultParam2, optionalParam1, ...)
{
  string pString = "params = JSON.stringify({ pageSize: _this.pageSize, pageIndex: _this.pageIndex";
  if (optionalParam1 != undefined)
  {
    pString += ",yourOptionParam: optionalParam1";
  }
  pString += "});";
  eval(pString);
}

или, если вы заранее не знаете, какие необязательные параметры, вы можете использовать параллельные массивы, один из которых является переменной, а другой - именем параметра, и передавать их в функцию buildJSONParams как для выполнения только одного и того же действия. он проходит через 2 массива, которые передаются внутрь.

0 голосов
/ 28 апреля 2010

как то так должно работать

var params = getDefaultParams();
// some condition to determine if extra needed?
params.specialDate = getSpecialDateParam();
// could also be written as params['specialDate'] = getSpecialDateParam();

$.ajax({
    webserviceUrl,
    JSON.stringify(params),
    function(result) { 
          //some logic
    });
});


// ****************************
function getDefaultParams () {
    return {
        pageSize: _this.pageSize,
        pageIndex: _this.pageIndex        
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...