【问题标题】:Passing values to a jQuery's web-service call?将值传递给 jQuery 的网络服务调用?
【发布时间】:2011-07-29 22:53:56
【问题描述】:

我正在关注各种在线示例,但均未成功。我只是想创建一个将值传递给 Web 服务调用的初始示例。

我做错了什么?

我可以用 HttpHandlers 轻松做到这一点……这么简单的事情不应该这么难吗?

更新:
它失败的原因是缺少“contentType”属性。这在following answer 中有概述。

这是我不断遇到的错误:

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()

这是 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();" />

这是网络服务:

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();
         }
    }
}

【问题讨论】:

  • 感谢大家的帮助...我会通过评论让人们知道什么有效,什么无效。

标签: jquery web-services


【解决方案1】:

尝试替换以下行:

数据:'{ "key": 42 }',

与:

数据:JSON.stringify(数据),

其中 data 是前面声明的变量:

var data = { key : 42 };

这取自以下答案:Calling .Net webservice with Jquery is causing woe when trying to post data

更新

上面的建议不是问题,正如作者所说,问题原来是 contentType 设置不正确。但是,上面的链接确实指向了这一点。

【讨论】:

  • 您原来的 REASON 实际上是不正确的......但参考文章确实回答正确。这就是为什么你应该得到荣誉。
【解决方案2】:

我认为您的问题在于您如何设置数据参数,我认为您不需要引号:

data: ({ key: 42 }),

【讨论】:

  • 您绝对不需要单引号(撇号)来表示数据的 JSON。
【解决方案3】:

我认为您的报价可能需要更改;

 data: '{ "key": 42 }',

应该是

data: "{ 'key': 42 }",

【讨论】:

    【解决方案4】:

    您能否尝试 GET 并将“密钥”作为 URL 中的参数传递?

    【讨论】:

    • 感谢您的回复...但是这样做会产生一个相当长的 responseText 错误,开头为:Request format is unrecognized for URL unexpectedly ending in '/TryThis'。:
    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多