如何从javascript客户端将参数传递给WCF Rest服务的方法?

时间:2015-07-05 11:55:52

标签: javascript jquery wcf

我有一个wcf服务运行,其中包含一个返回字符串的方法。我能够成功地在浏览器中运行该服务。此外,我甚至可以传递所需的参数,并可以在浏览器中查看结果。

但是当我尝试从javascript客户端调用相同的方法时,参数值不会传递给方法,因此它不返回任何内容。

以下是我的服务从浏览器运行时返回的内容 enter image description here

这是我的界面实施:

 [OperationContract]

            [WebInvoke(Method = "GET",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped)]
            string JSONData(string id);

这是我的服务方法实现代码:

public string JSONData(string id)
    {
        if (id == null || id == "")
        {
            return "Id is null";
        }
        else
        {
            return "You requested product " + id;
        }
    }

如上所示,服务工作正常,从网址传递参数。但是,当我使用jquery的函数参数进行调用时,没有传递这是我的javascript客户端代码

<script type="text/javascript">
        // A $( document ).ready() block.
        $(document).ready(function () {
            // alert("pass");
            var valu = "123";
            $("#btnclick").click(function () {
                debugger;
                $.ajax({
                    cache: false,
                    type: "GET",
                    async: false,
                    url: "http://localhost:35798/RestServiceImpl.svc/JSONData",
                    data: JSON.stringify(valu),
                    contentType: "application/json",
                    dataType: "json",
                    success: function (result) {
                        var ans = JSON.stringify(result);
                        alert("success");
                        alert(ans);
                    },
                    error: function (xhr) {
                        alert("error");
                        alert(xhr.responseText);
                    }
                });
            });
        });

    </script>

我希望能够从jquery代码传递参数。任何建议让这项工作真的很感激。

1 个答案:

答案 0 :(得分:1)

值必须是一个关键值对:

var valu = {id:"123"};

或字符串:

var value = 'id="123"';

目前正在形成正确的请求。

在第一种情况下将其作为普通JavaScript对象传递,不要对其进行字符串化。如果你这样做,jquery会将它作为一个字符串附加到请求中。

使用浏览器中的网络调试工具解决这些问题。

这会将您的查询字符串正确序列化为/JSONData?id=123,而不是生成/JSONData/"123"的解决方案

您的代码有编辑...

<script type="text/javascript">
    // A $( document ).ready() block.
    $(document).ready(function () {
        // alert("pass");
        var valu = {id: "123"};
        $("#btnclick").click(function () {
            debugger;
            $.ajax({
                cache: false,
                type: "GET",
                async: false,
                url: "http://localhost:35798/RestServiceImpl.svc/JSONData",
                data: valu,
                contentType: "application/json",
                dataType: "json",
                success: function (result) {
                    var ans = JSON.stringify(result);
                    alert("success");
                    alert(ans);
                },
                error: function (xhr) {
                    alert("error");
                    alert(xhr.responseText);
                }
            });
        });
    });

</script>