将值传递给jQuery的网络服务调用?

Pri*_*ERO 1 jquery web-services

我正在跟踪各种在线示例,但都没有成功。我只是试图创建一个将值传递给Web服务调用的初始示例。

我究竟做错了什么?

我可以使用HttpHandlers轻松实现此功能...这个简单的事情应该不难吗?

更新:
失败的原因是因为缺少“ contentType”属性。下面的答案对此进行了概述。

这是我不断得到的错误:

System.InvalidOperationException: Missing parameter: key.\r\n at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)\r\n at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)\r\n at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()\r\n at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
Run Code Online (Sandbox Code Playgroud)

这是HTML:

<script type="text/javascript">

    var url = '<%=ResolveUrl("~/Services/ProjectDialog.asmx/TryThis")%>';

    function callWebService() {

        jQuery.ajax({
            cache: false,
            type: 'POST',
            complete: onComplete,
            data: '{ "key": 42 }',
            dataType: 'application/json; charset=utf-8',
            error: onError,
            success: onSuccess,
            url: url
        });
    }

    function onComplete(status, xmlHttpRequest) {
        var stop = "";
    }
    function onError(xmlHttpRequest, status, error) {
        var stop = "";
    }
    function onSuccess(data, status, xmlHttpRequest) {
        var stop = "";
    }

    jQuery(document).ready(function() {
    });

</script>

<input type="button" value="Run Web Service" onclick="callWebService();" />
Run Code Online (Sandbox Code Playgroud)

这是Web服务:

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

namespace My.Services
{
    /// <summary>
    /// Summary description for ProjectDialog
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class ProjectDialog : System.Web.Services.WebService
    {
         [WebMethod]
         [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
         public string TryThis(Int32 key)
         {
             return key.ToString();
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*ell 5

尝试替换以下行:

数据:“ {“键”:42}”,

带有:

数据:JSON.stringify(data),

其中data是先前声明为的变量:

var data = {key:42};

这是从以下答案中获取的:尝试发布数据时,使用Jquery调用.Net Web服务会造成麻烦。

更新

正如作者所指出的,上述建议不是问题,事实证明该问题是contentType设置不正确。但是,以上链接确实指出了这一点。