有两种方法GetUserAssignedSystems()
和GetUserAssignedSystems(string Id)
这些方法的行为彼此截然不同。问题是,当我想调用GetUserAssignedSystems(string Id)
时,会调用无参数方法。
以下是方法:
[WebMethod]
[ScriptMethod]
public IEnumerable GetUserAssignedSystems(string cacId)
{
return Data.UserManager.GetUserAssingedSystems(cacId);
}
[WebMethod]
[ScriptMethod]
public IEnumerable GetUserAssignedSystems()
{
//do something else
}
这是调用的jQuery:
CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems",
"{'cacId':'" + $('#EditUserCacId').val() + "'}", function(result) {
for (var userSystem in result.d) {
$('input[UserSystemID=' + result.d[userSystem] + ']').attr(
'checked', 'true');
}
});
为什么忽略这种方法的任何想法?
更新
以下是CallMfttService的代码
function CallMfttService(method, jsonParameters, successCallback, errorCallback){
if (errorCallback == undefined)
{
errorCallback = function(xhr)
{
if (xhr.status == 501)
{
alert(xhr.statusText);
}
else
{
alert("Unexpected Error");
}
}
}
$.ajax({
type: "POST",
url: method,
data: jsonParameters,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successCallback,
error: errorCallback
});
}
答案 0 :(得分:4)
Javascript不支持重载函数(具有相同名称且接受不同参数的多个函数),其方式与某些语言相同。如果您需要它根据输入参数的存在选择性地执行任务,您必须在函数中添加检查以确定变量是否已通过if ( param == undefined) {}
,然后根据是否存在以适当的方式运行说变量。使用不同的参数重新定义函数两次将不起作用。
根据更新,请尝试更改您的通话:
CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems",
{'cacId': $('#EditUserCacId').val() }, function(result) {
for (var userSystem in result.d) {
$('input[UserSystemID=' + result.d[userSystem] + ']').attr(
'checked', 'true');
}
});
基本上你传递的是字符串,而不是jQuery $ .ajax方法的对象,这可能会阻止你的值正确到达服务器。让我知道这是怎么回事。
答案 1 :(得分:0)
我不确定您是要发送JSON还是普通对象文字。但在第一种情况下,您的JSON无效...... JSON需要围绕字符串和键的双引号:
CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems", '{"cacId":"' + $('#EditUserCacId').val() + '"}', function(result) {
不知道CallMfttService
做了什么,很难说,但我也会尝试这样做:
CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems", {cacId: $('#EditUserCacId').val()}, function(result) {
答案 2 :(得分:0)
我遇到了一个类似的问题,即没有调用正确的C#WebMethod。我收到“资源未找到错误”。似乎无论出于何种原因(我不确定为什么,也许其他人可以详细说明),WebMethod类不喜欢重载方法。它错误地解释了传递参数的类型。如果我删除C#WebMethod类中的所有重载方法并且只保留一个,无论我留下哪一个,它现在都会被调用并按预期工作。