html
<a onclick="testGetParametersDynamic2();">fill in names and check it out</a>
<br />
<p>Enter First Name</p>
<input id="myFirstName" type="text" />
<br />
<p>Enter Last Name</p>
<input id="myLastName" type="text" />
<div id="outputGET3"></div>
c#
[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = true)]
public string testGetParametersDynamic(string firstName, string lastName)
{
string fullName = firstName + lastName;
return fullName;
}
我已经尝试了多种输入数据的方式,我认为这就是问题所在
尝试 1
function testGetParametersDynamic2()
{
$.ajax(
{
post: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: '{"firstName":"' + $('#myFirstName').val() + '","lastName":' +
$('#myLastName').val() + '"}',
url: 'UtilitieService.asmx/TestGetParametersDynamic',
success: function (result)
{
var test = result.d;
var outputDiv = $('outputGET3');
outputDiv.html(test);
},
error: function ()
{
alert('Fail Test Get Dynamic');
}
});
}
尝试 2:
function testGetParametersDynamic2()
{
$.ajax(
{
post: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: "firstName" + $('myFirstName').val() + "&lastName" + $('myLastName').val(),
url: 'UtilitieService.asmx/TestGetParametersDynamic',
success: function (result)
{
var test = result.d;
var outputDiv = $('outputGET3');
outputDiv.html(test);
},
error: function ()
{
alert('Fail Test Get Dynamic');
}
});
}
两次我都收到这个错误:
无效的网络服务调用,缺少参数值:\u0027firstName\u0027
最佳答案
我希望您使用 [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
属性作为 web 方法,或者在使用 .NET 4.0 的情况下在 web.config 中设置相同的信息。
在我看来,你的第一次尝试几乎是正确的,但你应该更换
data: '{"firstName":"' + $('#myFirstName').val() + '","lastName":' +
$('#myLastName').val() + '"}',
到
data: '{"firstName":"' + $('#myFirstName').val() + '","lastName":"' +
$('#myLastName').val() + '"}',
(在 $('#myLastName').val()
之前跳过了起始双引号)。
我强烈建议您不要对 JSON 使用手动序列化。例如,如果来自 $('#myFirstName').val()
或 $('#myLastName').val()
的文本将具有 '"' 或 '\' 字符,字符必须使用额外的反斜杠 ('\') 进行转义(参见 here )。您应该使用脚本 json2.js 中的 JSON.stringify
函数代替手动序列化您可以从 http://www.json.org/js.html 或 here 下载。在最近的网络浏览器中,该功能是 native 实现的,如果发生,json2.js 将使用 native 实现。
$.ajax
的data
参数可以改写如下:
data: {
firstName: JSON.stringify($('myFirstName').val()),
lastName: JSON.stringify($('myLastName').val())
}
或者在某些情况下
data: {
firstName: function() { return JSON.stringify($('myFirstName').val()); },
lastName: function() { return JSON.stringify($('myLastName').val()); }
}
有关详细信息,请参阅 this old answer可能还有this .
已更新:抱歉,没有使用 JSON.stringify
的正确版本可能没有数据使用:
url: 'UtilitieService.asmx/TestGetParametersDynamic?firstName=' +
encodeURIComponent('"' + $('#myFirstName').val() + '"') +
'&lastName=' + encodeURIComponent('"' + $('#myLastName').val() + '"')
我强烈建议您始终只使用我上面描述的 JSON.stringify
版本。
关于c# - 将多个参数从 jquery ajax GET 传递给 .asmx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048026/