今天在修改程序的时候,发现jquery的ajax函数在向后台发送中文或者德文等字符的时候会出错。不是返回错误,而是直接跳到error那去了。
先看代码:
$("#btn_save").click(
function()//save
{
var shareName =$("#txt_sharename").val();
if(shareName !="")
{
$("#dialog_wait").dialog("open");
$.ajax({
url: "/share/rename/",
type: 'POST',
data:{"shareName":shareName},
dataType: 'xml',
timeout: 50000,
error: function(){
$("#dialog_wait").dialog("close");
alert('Error loading XML document');
},
success: function(xmldata){
var errCode = JQXML.getDataForXML($(xmldata),JQXML.ERROR_CODE);
if(errCode ==0)//success
{
//operation success
}
else
{
//operation failure
}
}
});
}
else
{
//no share name
}
});
加入成功会跑success那的代码,但是现在偏偏是跑error那的代码,输入中文或者德文会这样,如果是英文则没有这个问题。
初步判定是编码问题,对获取的值进行编码:
//encoding sharename
var shareName =escape($("#txt_sharename").val());
再次发送,问题解决。
同时,在使用得到的值得时候需要解码:
//decode sharename
var sharename=unescape($("#txt_sharename").val());
这里加入一些escape的知识:
escape采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。
在加些jquery ajax函数的知识:
ajax() 方法通过 HTTP 请求加载远程数据。
该方法是 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。
语法
jQuery.ajax([settings])
更多关于jQuery.ajax()函数的信息,请看http://www.w3school.com.cn/jquery/ajax_ajax.asp