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
参数中的值(并且您引用了id
、shopdoccode
等的值,但您不能剃须刀(服务器端代码)和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中文参数问题的主要内容,如果未能解决你的问题,请参考以下文章