与Ajax.ActionLink相比,请求$ .ajax调用中的URL编码问题和$ .ajax中的Max请求URL长度

时间:2010-02-26 07:20:13

标签: asp.net-mvc jquery

我正在做一个简单的$ .ajax请求:

$.ajax({              
    type: "POST",

    url: "/Run/" + param1 + "/" + param2,

    dataType: 'html',

    error: function(error) {

    },

    success: function(html) {

    }
});

如果我的 param2 值类似于 http://localhost/pub/file?val1=Some文字& val2 =某些文字 ,那么编码使用 escape(param2),encodeURI(param2),encodeURIComponent(param2)完成没有帮助。我得到了ERROR - >

HTTP错误400.0 - 错误请求 ASP.NET在URL中检测到无效字符

我的问题 - >

  1. 我应该如何编码 param2
  2. $ .ajax电话中 请求网址 的最大长度是多少?
  3. 请求网址最长 取决于发出请求的浏览器类型?
  4. 我观察到如果我使用 Ajax.ActionLink ,那么我不需要对传递给action的参数进行编码,我可以传递长度为>的参数。 10,000个字符。但我不知道如何使用我的java脚本中的 Ajax.ActionLink 进行显式调用。我需要点击该actionlink来通过 Ajax.ActionLink 进行调用。
  5. Ajax.actionLink的好处 - > 请使用 Ajax.ActionLink (这是我的观察)查看传递给操作的参数 categoryName 的长度 alt text

    alt text

1 个答案:

答案 0 :(得分:3)

这些大参数应该张贴,不会在网址中发送。

$.ajax({              
    type: 'POST',
    url: '/Run',
    data: { param1: param1, param2: param2 },
    dataType: 'html',
    error: function(error) {
    },
    success: function(html) {
    }
});

这将自动处理参数编码。如果你绝对坚持在网址中发送它们,你可以声明一个全局的javascript变量来保存要调用的URL:

<script type="text/javascript">
    var url = '<%= Url.Action("Run"), new { param1 = "value1", param2 = "value2" } %>';
    $(function() {
        $.ajax({              
            type: 'POST',
            url: url,
            dataType: 'html',
            error: function(error) {
            },
            success: function(html) {
            }
        });
    });
</script>