AJAX的url中文参数问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AJAX的url中文参数问题相关的知识,希望对你有一定的参考价值。

当请求的url带有值为中文的参数时,会出系统错误。即在后台处理的servlet得到的参数值为乱码。 如果解决?

PS:xmlHttp.open("GET",url);
hehe

这是你的字符集问题,
也困扰了我很久的,
你可以
XMLHttpReq.setRequestHeader("Content-Type","GBK");
设置一下xmlhttpRequest的字符集:
最好参照一下:
http://hi.baidu.com/xunl/blog/item/d8e40327591cbe07908f9dac.html
相信你能找到答案

参考资料:http://hi.baidu.com/xunl/blog/item/d8e40327591cbe07908f9dac.html

参考技术A xmlHttp.open("GET",url);相当于是在浏览器中敲入url然后按回车的效果,那样是不能直接传中文参数的.比如:
http://127.0.0.1:8080/servlet1?name=中文
这样写不行.应该用javascript的函数encodeURIComponent()对"中文"进行编码形成编码后的字符串,然后在servlet中用iso-8859-1对该字符串进行解码,即可得到正确的中文.
参考技术B 有可能是应用服务器的默认编码设置的问题。如果应用服务器(如tomcat)的编码没有改过,则你使用ajax方式访问数据时服务器端有可能出现乱码。
楼上两位提供的方法如果不行可以试试这个
String aaa=new String(request.getParameters("aaa").getBytes("iso-8859-i"),"gb2312");

其中iso-8859-i为服务器默认编码
参考技术C 后台在接收前先进行编码转换:request.setCharacterEncoding("UTF-8");

使用 Ajax 的 URL 动作参数

【中文标题】使用 Ajax 的 URL 动作参数【英文标题】:Url action parameters using Ajax 【发布时间】:2017-09-07 10:47:12 【问题描述】:

我正在尝试使用参数将数据从视图传递到控制器。 现在我遇到了一些困难。一旦我从表中选择一行并按下具有 onclick 方法的按钮,我就会尝试传递这些参数 ShowTasks()

C# 控制器:

     [Route("/service/delivery/id/shopdoccode/regdate")]
     public ActionResult Delivery(string id, string shopdoccode, string regdate)
     
        //do stuf
     

用户点击按钮时的Javascript函数:

function ShowTasks() 
    //Dear *** > This works, this is for selecting a row in the table
    var $selectedRow = $(".highlight");
    if ($selectedRow.length == 1) 
        var dcColumn = 0;
        var rdColumn = 1;
        var shopdoccodeColumn = 3;

        //assigning name to the colomn value 
        var id = $selectedRow[0].children[dcColumn].innerText.trim();
        var regdate = $selectedRow[0].children[rdColumn].innerText.trim();
        var shopdoccode = $selectedRow[0].children[shopdoccodeColumn].innerText.trim();

        //ajax 
        if (id && regdate && shopdoccode) 
            $.ajax(
                type: 'POST',
                url: '@Url.Action("service", "delivery" ,new  id = "id", shopdoccode = "shopdoccode", regdate = "regdate" )',
                data:  id, regdate, shopdoccode ,
                success: function (data) 
                    if (data.success) 
                        console.log("Succes");
                    

                ,
                error: function (data) 
                    console.log("Error");
                
            );
        
    

到目前为止我做了什么?坐了几个小时试图找到一种方法将参数提供给我的控制器,以便我可以调用 SQL 存储过程。 不幸的是,我不能简单地为此使用隐藏表单。

这也很有帮助: Url.Action parameters?

@sleeyuen

【问题讨论】:

只是url: '@Url.Action("service", "delivery")', - 您已经发送了data 参数中的值(并且您引用了idshopdoccode 等的值,但您不能剃须刀(服务器端代码)和javascript变量(客户端代码)无论如何) 并根据您的错误消息 - 您的脚本位于单独的文件中 - 剃刀代码未在外部文件中解析。 【参考方案1】:

在我看来,您的 Url.Action 的参数顺序错误。将其更改为:

url: '@Url.Action("delivery", "service", new  id = "id", shopdoccode = "shopdoccode", regdate = "regdate" )',

这是您想要的适当重载:

Action(String, String, Object) 依次包含 actionName、controllerName 和 routeValues。

【讨论】:

谢谢,但是当我运行应用程序并检查按下按钮时会发生什么:jquery-1.12.4.js:10254 POST localhost:63061/……0shopdoccode%20=%20%22shopdoccode%22 ,%20regdate%20=%20%22regdate%22%20%7D) 404(未找到) 或许贴一张截图,因为这没有多大意义。 完成 ;) 当我检查浏览器并单击按钮时会发生这种情况 剃须刀文件中有这个javascript吗?还是在 .js 文件中?我猜是后者,因为它不知道为什么 @Url.Action 仍然是生成的 url 的一部分。【参考方案2】:

您不能将 *.js 或 *.html 文件写入剃须刀代码。

@Url.Action(string actionName,string controllerName,object routeValues)

以上代码只能使用*.cshtml文件。

【讨论】:

当我把它放在我的 cshtml 中时,我收到来自 new id = "id", shopdoccode = "shopdoccode", regdate = "regdate" )' 的错误,参数 3:cannot convert from ' 因为你已经在ajax里面提交了参数,所以不需要在Action中设置objectValue 类似@Url.Action("ArticleDetail", "Article", new id = item.ID ),这里的item.ID不是来自js。【参考方案3】:

使用 Url.RouteUrl 而不是 Url.Action 进行测试

【讨论】:

以上是关于AJAX的url中文参数问题的主要内容,如果未能解决你的问题,请参考以下文章

Django - AJAX - 为啥我需要 url 参数?

这是 jquery.ajax() 中的有效 url 参数吗?

使用 Ajax 的 URL 动作参数

Ajax通过url发送参数

Drupal Ajax:通过 url 与数据参数传递值

jQuery ajax url 参数 drupal 服务器