用Ajax调用web api,解决URL太长的问题;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Ajax调用web api,解决URL太长的问题;相关的知识,希望对你有一定的参考价值。

本来是用的WCF,但是服务需要多种方式调用(后台+前端Ajax),最终局面就是我在WCF每个服务中都判断一下↓

            #region 解决接收不到Ajax中传来的参数...
            if (jsonParames == null && HttpContext.Current.Request.QueryString["参数"] != null)
                jsonParames = HttpContext.Current.Request.QueryString["参数"];
            else if (jsonParames == null && HttpContext.Current.Request.QueryString["参数"] == null)
                return JSON.Instance.ToJSON("{\"ret\":\"0\",\"msg\":\"参数为空.\"}");
            #endregion

 但是Ajax中用QueryString传输数据的话,有长度限制。

找了下,还有人说可以用form来解决提交的

<form id=form0 method=POST action=http://localhost:22377/api/Article_/Article_Update/ onsubmit = "set_v()">
<input id=id_v type=hidden value=value_default name=jsonParames/>
<input type="submit" value="XXX" class=""  />
</form>

不过提交完了之后直接就会将页面跳转到‘action‘所指向的页面。。。

 

最后还是决定再发布一个web api,然后用Ajax来解决

    <form id="form1">
        <div>
            ID:<input type="text" id="id_ID" />
            <br />
            <input type="button" value="POST" id="getPersons" />
        </div>
        <div id="ret">

        </div>
    </form>
    <script type="text/javascript">
    
    
    function set_v(){
    alert(‘set value!‘);
    var v = ‘too long data .‘;
    document.getElementById("id_v").value = v;
    alert(document.getElementById("id_v").val());
    }

        $(‘#getPersons‘).click(function () {
            document.getElementById("ret").innerhtml = ‘‘;//清楚上次查询内容...
            var ID = $("#id_ID").val();
            $.ajax({
                type: ‘POST‘,
                url: ‘http://localhost:22377/api/Article_/Article_Update‘,//?jsonParames=‘ + jsonParames,
                //dataType: ‘JSONP‘,//如果这行不注释请求的‘type‘就是GET,(哪怕第一行就规定了type:‘POST‘)
                //contentType:"application/json; charset=utf-8;",//这行不注释说不允许跨域调用!!!
                data: {
                    "jsonParames": ‘{"id":"0"}‘//jsonParames和web api中的参数名对应;
                },
                success: function (_data) {
                    alert(_data);
                    var info = eval(‘(‘ + _data + ‘)‘);
                    //alert(data);
                    var list = eval(‘(‘ + info.list + ‘)‘);
                    var fragment = document.createDocumentFragment();
                    $.each(list, function (i, field_list) {
                        $.each(field_list, function (i, field) {
                            var item = document.createElement("li");
                            item.appendChild(document.createTextNode(‘[‘ + i + ‘]‘ + ‘...‘ + field));
                            fragment.appendChild(item);
                            //alert(i + "...is..." + field);
                        })
                    })
                    $("#ret").append(fragment);
                },
                error: function () { }
            });
        });

    </script>

 web api 中;

        [HttpPost, HttpGet]
        public string Article_Update([FromBody]string jsonParames)
        {

            if (string.IsNullOrEmpty(jsonParames) || jsonParames.ToLower() == "jsonparames")
            {

                jsonParames = System.Web.HttpContext.Current.Request.Form["jsonParames"];

            }
            return "xx";
}

 

以上是关于用Ajax调用web api,解决URL太长的问题;的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery ajax 从 asp.net 网页表单页面调用 web api url

WCF服务引用之后自动生成的泛型代理类名称太长的解决方案

来自 ajax 的 Web api Post 调用失败

如何将带有附加数据的 FormData 文件发送到 asp.net web api ajax 调用

SQL Pivot表较大的列值给出了太长的错误

无法从 .net 中的 Ajax 调用 .asmx Web 服务