使用jQuery.ajax()和. net web服务提交HTML表

本文关键字:服务 web 提交 HTML net jQuery ajax 使用 | 更新日期: 2023-09-27 18:08:14

我是jQuery和JavaScript的新手,但我想向我编写的。net web服务提交电子邮件。我已经在我的数据中测试了一些简单的值的web服务,但我希望我可以提交一个完整的表,我在做一些客户端和服务器端验证后填充服务器端。

data: '{ strFrom: "abcd@abc.edu", to: "abcd@abc.edu", cc: "abcd@abc.edu", subject: "test subject", body: "test body" }'

然而,就像我说的,我有这个表,我已经填充了响应的形式,当我做一个var body = $("#divSuccessDetails").html();并传递它,而不是"测试体",我得到一个无效的对象响应。我已经测试了我选择的表的结果,它是沿着这一行:

<table id="ctl00_ContentPlaceHolder1_tblSuccessDetails" class="successDetails" style="width:80%;">
    <tbody><tr>
        <td class="successHeading" colspan="2">
    Reporting Category
    </td>
    </tr>
    <tr>
        <td>
        <span id="ctl00_ContentPlaceHolder1_lblBilling">Billing Provider: <b></b></span>
    </td>
        <td rowspan="1">
        <span id="ctl00_ContentPlaceHolder1_lblCategory">Reporting Category: </span></td>
    </tr>
    <tr>

我的web服务方法是这样的:

 public string Email(string strFrom, string to, string cc, string subject, string body) {
    try
    {
        MailMessage objMail = new MailMessage();
        MailAddress from = new MailAddress(strFrom);
        objMail.From = from;
        objMail.To.Add(to);
        objMail.CC.Add(cc);
        objMail.Subject = subject;
        objMail.Body = body;
        SmtpClient smtp = new SmtpClient("pobox.abc.edu");
        smtp.Send(objMail);
        return "{'"form'": { '"successful'": '"true'" }}";
    }
    catch (Exception ex)
    {
        return "{'"form'": { '"successful'": '"false'" }, {'"exception'": {'"ex'": '"" + ex.Message + "'" }}";
    }
}

我收到的错误信息是这样的:

"Invalid object passed in, ':' or '}' expected. (176): { strFrom: "abcd@abc.edu", to: "abcd@abc.edu", cc: "abcd@abc.edu", subject: "IDX Provider Form by IDX Provider Form by abcd", body: " <table id="ctl00_ContentPlaceHolder1_tblSuccessDetails" class="successDetails" style="width:80%;"> <tbody><tr> <td class="successHeading" colspan="2">

我只是希望传递它作为一个字符串,因为这是我收到的…我之前在email对象中使用了大量的HTML字符串,但这是我第一次尝试通过AJAX传递它。

使用jQuery.ajax()和. net web服务提交HTML表

如果你试图传递一个完整的HTML表格的HTML元素到web服务,你将遇到的问题与HTML字符(如引号,双引号等…)。您可以转义字符,但我认为您最好找到您想要在HTML表中发送的特定数据值,并将它们分配给数据对象,因为这将导致只发送"数据"vs。"标记和数据"。如果您将整个HTML表传递给服务器,那么您将不得不解析HTML文档以提取您的值。

作为另一种解决方案,您可以使用jQuery将表单发布到可以处理它的页面。

$.post("FormProcessor.aspx", $("#testform").serialize());
(更新)

如果您只想将表的HTML标记发送到服务器,则需要对结果进行HTML编码,并将值作为字符串值传递给服务器。

    jQuery.fn.EncHTML = function () {
        return String(this.html())
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
    };

这是你如何在GridView中使用它。

var html = $('#<%= Sample.ClientID %>').EncHTML();

这里是如何做一个标准的jQuery AJAX请求ASMX/WCF服务。

$.ajax({
    type: 'POST',
    url: '/TableManager.asmx/Process',
    data: JSON.stringify({ tableContents: html }),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
});

调用TableManager的"Process"方法。asmx服务。它期望传递一个名为"tableContetns"的字符串类型变量。它有一个返回类型VOID,所以没有任何东西被发送回客户端/页面,但这可以改变为字符串,这样你就可以发送一个消息返回表/数据被处理。

注意:我也使用JSON。Org stringify函数正确JSON编码我的对象被发送到服务器。

服务器上的web方法

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class TableManager : WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public void Process(string tableContents)
    {
        var table = Server.HtmlDecode(tableContents);
        // Do Something (Email, Parse, etc...).
    }
}

从客户端拉回的表将不包含"table"标签,因此您需要自己添加这些标签。