c# - 将多个参数从 jquery ajax GET 传递给 .asmx

标签 c# jquery

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.htmlhere 下载。在最近的网络浏览器中,该功能是 native 实现的,如果发生,json2.js 将使用 native 实现。

$.ajaxdata 参数可以改写如下:

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/

相关文章:

c# - 断言被测系统应该抛出断言异常

c# - C# 委托(delegate)中的线程 sleep 时间

c# - 为什么 C# 为相同的源代码生成不同的 EXE?

jquery - jQuery 的前同级选择器

javascript - 输入模糊后无法将焦点返回到 div

c# - cpanel远程连接mysql数据库

c# - WCF 中的 System.AddIn

javascript - 通过 javascript 设置 Shopify 选项选择器/更改所选变体的值

javascript - 如何从 jQuery 日期选择器发送表单 POST

jquery - 在 Internet Explorer 11 中,悬停下拉菜单在选择之前关闭