当前位置: 首页 > 面试题库 >

使用jQuery成功将JSON对象发送到ASP.NET WebMethod

禹昆
2023-03-14
问题内容

我已经为此工作了3个小时,已经放弃了。我只是试图使用jQuery将数据发送到ASP.NET
WebMethod。数据基本上是一堆键/值对。因此,我尝试创建一个数组并将这些对添加到该数组中。

我的WebMethod(aspx.cs)看起来像这样(对于我在JavaScript中构建的内容,这可能是错误的,我只是不知道):

[WebMethod]
public static string SaveRecord(List<object> items)
{
    ...
}

这是我的示例JavaScript:

var items = new Array;

var data1 = { compId: "1", formId: "531" };
var data2 = { compId: "2", formId: "77" };
var data3 = { compId: "3", formId: "99" };
var data4 = { status: "2", statusId: "8" };
var data5 = { name: "Value", value: "myValue" };

items[0] = data1;
items[1] = data2;
items[2] = data3;
items[3] = data4;
items[4] = data5;

这是我的jQuery AJAX调用:

var options = {
    error: function(msg) {
        alert(msg.d);
    },
    type: "POST",
    url: "PackageList.aspx/SaveRecord",
    data: { 'items': items },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: false,
    success: function(response) {
        var results = response.d;
    }
};
jQuery.ajax(options);

我得到错误:

Invalid JSON primitive: items.

因此,如果我这样做:

var DTO = { 'items': items };

并像这样设置数据参数:

data: JSON.stringify(DTO)

然后我得到这个错误:

Cannot convert object of type \u0027System.String\u0027 to type \u0027System.Collections.Generic.List`1[System.Object]\u0027

问题答案:

使用AJAX.NET时,我总是使输入参数只是一个普通的旧对象,然后使用javascript反序列化器将其转换为所需的任何类型。至少以这种方式,您可以调试并查看Web方法正在接收的对象类型。

使用jQuery时需要将对象转换为字符串

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true">
            <Scripts>
                <asp:ScriptReference Path="~/js/jquery.js" />
            </Scripts>
        </asp:ScriptManager>
        <div></div>
    </form>
</body>
</html>
<script type="text/javascript" language="javascript">
    var items = [{ compId: "1", formId: "531" },
        { compId: "2", formId: "77" },
        { compId: "3", formId: "99" },
        { status: "2", statusId: "8" },
        { name: "Value", value: "myValue"}];

        //Using Ajax.Net Method
        PageMethods.SubmitItems(items,
            function(response) { var results = response.d; },
            function(msg) { alert(msg.d) },
            null);

        //using jQuery ajax Method
        var options = { error: function(msg) { alert(msg.d); },
                        type: "POST", url: "WebForm1.aspx/SubmitItems",
                        data: {"items":items.toString()}, // array to string fixes it *
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        async: false, 
                        success: function(response) { var results = response.d; } }; 
        jQuery.ajax(options);
</script>

和背后的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomEquip
{
    [ScriptService]
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        [WebMethod]
        public static void SubmitItems(object items)
        {
            //break point here
            List<object> lstItems = new JavaScriptSerializer().ConvertToType<List<object>>(items);
        }
    }
}


 类似资料:
  • 问题内容: 我正在尝试使用GET方法发送一个json对象。我的代码: 但是,收到的标头将“ Content-Length”设置为零,因此服务器上的json解析器无法读取内容。 我已经尝试设置内容长度标头,但是它仍然以零的形式出现在服务器上: 任何想法如何使它工作?它必须是GET请求。 问题答案: GET请求至少通常是没有消息正文。如文档中所述,jQuery将GET请求追加到url参数。您应该能够使

  • 问题内容: 我知道有很多关于通过JQuery / JSON使用WCF REST的文章,但是我无法使其正常工作。我目前停留在日期参数上。以下是我的C#方法: 以下是我的JavaScript代码: 我的第一个问题是我不断收到日期序列化错误: 它说它不会以开始和结束的方式开始/结束。 我的第二个问题是:我是否必须乘坐枚举数,还是有发送方法? 问题答案: 我拔了很多头发,为此流下了很多眼泪,但这确实可行。

  • 问题内容: 我创建了一个需要发布到jersey的json,这是由grizzly运行的具有REST网络服务的服务器获取需要输出的传入json对象。我正在尝试,但不确定如何正确实施。 我有一个在加载时运行此方法的html文件 问题答案: 要将json发送到服务器,首先必须创建json 这就是构造ajax请求以将json作为post var发送的方式。 json现在将在post var中。

  • 问题内容: 这可能吗? 可能带有:标头带有:?: 否则我可以使用: 然后将JSON对象发送到参数中,但如果可能的话,以这种方式发送它会很酷。 问题答案: 使用jQuery: 没有jQuery:

  • 问题内容: 我们可以通过拦截器将JSON发送到Struts2操作。http://tech.learnerandtutor.com/send-json- object-to-struts-2-action-by-jquery- ajax/中 有一个很好的示例。 当我们直接使用Ajax时,拦截器要求将请求设置为或设置为: 但是我们正在使用struts 2 jquery插件标签(和…)来为我们管理aja

  • 问题内容: 我正在尝试将JSON对象从Javascript / Jquery发送到PHP,并且在控制台中收到错误消息msg。我究竟做错了什么。我是JS和PHP的新手。 jQuery文件: PHP文件 问题答案: 菲尔(Phil)的出色回答,但自从OP标题说 从javascript( 不是jQuery )发送json对象到php 这是使用(原始)javascript的方法,以防万一有人寻找此方法: