从同一$ .ajax()调用中调用任何Web服务

时间:2010-04-28 14:09:23

标签: ajax json user-controls web-services

我正在创建一个控制客户端的用户控件,它有一个javascript文件附加到它。此控件有一个按钮,单击时会出现一个弹出窗口,此弹出窗口显示我的域实体列表。使用对Web服务的调用来获取我的实体。

我试图让这个弹出用户控件在我的所有实体上运行,因此我需要使用相同的$ .ajax()调用来调用所需的任何web服务(例如,每个实体一个)。

我的usercontrol中有webservice url的隐藏字段,您可以通过属性在标记中指定。到现在为止还挺好。当我需要一些额外的参数到webservice(除了pagesize和pageindex)时,问题就出现了。比如说一个webservice采用额外的参数“Date”。

目前我的参数设置如下:

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

然后我像这样调用webservice:

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

我想要做的是能够在需要时将我的额外参数(日期)添加到“Param”,这些参数的规范将通过usercontrol的属性来完成。

所以,底线,我有一组默认参数,并希望动态添加可选的额外参数。

这怎么可能?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我知道它不会很快,但类似

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个数组。

答案 1 :(得分:0)

这样的事情应该起作用

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        
    };
}