如何使用jquery将json数据发送到asmx(来自aspx)?

时间:2010-06-21 02:20:00

标签: c# asp.net jquery umbraco

我在aspx 3.5中构建了联系表单,我使用jQuery将其发送到Web服务(asmx)。

Web服务需要返回成功或错误代码。问题是在web方法中我只得到单个值而不是数组。我是ajax的新手,我尝试了很多解决方案,但没有任何结果。如果你只能解释我做什么的原则也很好。

这是客户方:

$(document).ready(function() 
{
    $("#submit").click(function(event)
    {
        $.ajax
        ({
            type: "POST",
            url: "RVContactFormMailer.asmx/HelloToYou",                
            data: "{'name': '" + $('#name').val() + "', 'company':'" + $('#company').val() + "', 'phone':'" + $('#phone').val() + "', 'email':'" + $('#email').val() + "', 'questions':'" + $('#questions').val() + "'}" ,                 
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
            AjaxSucceeded(msg);
         }, error: AjaxFailed
        });
   });

在萤火虫中它正确发送:

{'name': 'jhon', 'company':'example', 'phone':'123', 'email':'jhon@jhon.com', 'questions':'hello'}

asmx代码是(请忽略名称,其示例:

  [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService] // To allow this Web Service to be called from script, using ASP.NET AJAX or JQuery.
    [ToolboxItem(false)]
    public class RVContactFormMailer : System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]  
        public string HelloToYou(string name)
        {
            return "Hello " + name;
        }
    }

当我调试时,我看到输入参数“name”只包含一个字符串 - 我不知道如何获取我发送给服务的完整json字符串并包含所有表单数据 - 我想要取消它字符串数组或类似的东西,并处理它。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

问题不在客户端 - 它在服务器端 - 问题是我向Web服务发送了一些参数,但函数只有一个:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string HelloToYou(string name)

虽然正确的应该是:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string HelloToYou(string name, string company, string phone, string email, string questions)

无论如何,感谢您的帮助!

答案 1 :(得分:0)

你试过看过request.form集合吗?由于您正在发布请求并将params作为数据传递给请求,因此它将在Request.Form中可用。