我希望有人可以帮我解决以下问题:因为我打破了我的小脑袋!我已经创建了一个包装器,因此我可以使用jquery轻松调用webservices / pagemethod。现在在ajax调用的成功函数中我希望能够调用一个函数(带有可选参数)我已经完成了以下操作但是我不确定我是否是正确的方向:
function AjaxMethod(path, fn, paramArray, returnParamArray, successFn, errorFn) {
var paramList = '';
if (paramArray.length > 0) {
for (var i = 0; i < paramArray.length; i += 2) {
if (paramList.length > 0) paramList += ',';
paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
}
}
paramList = '{' + paramList + '}';
if (returnParamArray.length > 0) {
$.ajax({
type: "POST",
url: path + "/" + fn,
contentType: "application/json; charset=utf-8",
data: paramList,
dataType: "json",
success: function () {
var strFun = successFn;
var strParam = returnParamArray;
var funcCall = strFun + "('" + strParam + "');";
//Call custom function with parameter array
var ret = eval(funcCall);
},
error: errorFn
})
}
else {
$.ajax({
type: "POST",
url: path + "/" + fn,
contentType: "application/json; charset=utf-8",
data: paramList,
dataType: "json",
success: successFn,
error: errorFn
})
}
;}
我可以调用该函数,但似乎无法传递参数。我是朝着正确的方向前进还是走完了这条路?甚至可以将参数/值作为数组传递。或者有更简单的方法来实现这一目标。
顺便说一下,我需要这个函数来构成以下(原理图)动作:
1)用户使用数据删除表中的行 - DeleteRow(rowindex)
2)DeleteRow调用AjaxMethod删除数据库中的行
3)在成功事件中,我希望直观地删除特定行,因此我需要在successfunction中提供所选的rowindex。还有其他一些场景,所以它需要非常动态。
我也可以将这些信息存储在像CurrentDeletedIndex这样的全球变量中,但我希望它能够像我一样思考。
如果不随意问我,我希望自己有点清楚。
感谢您的时间。
亲切的问候, 标记
答案 0 :(得分:0)
答案 1 :(得分:0)
这样做的正确方法非常简单。首先,我们需要创建对象 paramList
,而不是 string 表示。我们可以这样做:
var paramList = {};
for(var i=0; i<paramArray.length; i+=2) {
paramList[paramArray[i]] = paramArray[i+1];
} // note: make sure the array size is even.
现在为成功功能:
var ret = successFn(paramList);
注意:如果successFn作为字符串传递,请将window[successFn]
用于全局范围,或window.some.scope[successFn]
用于特定范围,我全心全意地建议您将实际函数作为参数,而不是一些字符串。这对于无法访问的作用域中的匿名函数和函数很有用。哦,这也是正确的做事方式