加载中 ...
首页 > 新闻资讯 > 软件定制 正文

jQuery ajax在GBK编码下表单提交终极解决方法

2019-03-25 10:24:18 来源:沈阳软件公司 作者:沈阳软件开发

  前言:

  当jquery ajax在utf-8编码下(页面utf-8,接收utf-8),无任何问题。可以正常post、get,处理页面直接获取正确的内容。

  但在以下情况下:

  GBK -> AJAX POST ->GBK

  UTF-8 -> AJAX POST ->GBK

  后台代码无法获取正确的内容,通常表现为获取到奇怪字符、问号。

  timeout:%2020000,//超时时间设定

  data:para,//参数设置

  success:%20function(html){

  }

  });

  通过上面代码可以知道,当设置了data时候,jquery内部会调用jQuery.param方法对参数encode(执行本应浏览器处理的encode)。

  jQuery.param=function(%20a%20)%20{

  var%20s%20=%20[%20];

  function%20add(%20key,%20value%20){

  s[%20s.length%20]%20=%20encodeURIComponent(key)%20+%20'='%20+%20encodeURIComponent(value);

  };

  //%20If%20an%20array%20was%20passed%20in,%20assume%20that%20it%20is%20an%20array

  //%20of%20form%20elements

  if%20(%20jQuery.isArray(a)%20||%20a.jquery%20)

  //%20Serialize%20the%20form%20elements

  jQuery.each(%20a,%20function(){

  add(%20this.name,%20this.value%20);

  });

  //%20Otherwise,%20assume%20that%20it's%20an%20object%20of%20key/value%20pairs

  else

  //%20Serialize%20the%20key/values

  for%20(%20var%20j%20in%20a%20)

  //%20If%20the%20value%20is%20an%20array%20then%20the%20key%20names%20need%20to%20be%20repeated

  if%20(%20jQuery.isArray(a[j])%20)

  jQuery.each(%20a[j],%20function(){

  add(%20j,%20this%20);

  });

  else

  add(%20j,%20jQuery.isFunction(a[j])%20?%20a[j]()%20:%20a[j]%20);

  //%20Return%20the%20resulting%20serialization

  return%20s.join("&").replace(/%20/g,%20"+");

  }//jquery.param%20end

  上面是jQuery.param的代码,细心点可以留意到encodeURIComponent这方法,这是javascript内置的方法,对目标字符串执行utf-8%20encode,因此,当页面使用gbk编码时候,服务端会使用gbk进行解码,但实际提交的数据是以utf-8编码的,所以造成接收到内容为乱码或者为问号。

  解决方法:

  encodeURIComponent会以utf-8编码,在gbk编码下,可不可以以gbk进行编码呢?

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。