哎,還是老話題,一直纏繞著國人……
現在來個快刀斬亂麻,let’s go
由於項目前期使用的是1.2.6版本,後期使用的是1.3.2版本,所以分開來講;
說說實現的辦法,有點暴力——直接修改jQury源碼,不過不用擔心,不會影響整體功能而且就修改幾行代碼就可以解決亂碼,也就是在發送請求的時候把參數值再進行一次轉碼,修改的方法為param
1、jQuery 1.2.6 亂碼解決辦法
- 開啟1.2.6版本的源檔案
- 找到第2911、2921、2924行,分別修改對應參數值的地方包裹一層encodeURIComponent即可,修改後的結果如下: param: function( a ) {<br /> var s = [];</p><p> // If an array was passed in, assume that it is an array<br /> // of form elements<br /> if ( a.constructor == Array || a.jquery )<br /> // Serialize the form elements<br /> jQuery.each( a, function(){<br /> s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent(encodeURIComponent( this.value )) );<br /> });</p><p> // Otherwise, assume that it's an object of key/value pairs<br /> else<br /> // Serialize the key/values<br /> for ( var j in a )<br /> // If the value is an array then the key names need to be repeated<br /> if ( a[j] && a[j].constructor == Array )<br /> jQuery.each( a[j], function(){<br /> s.push( encodeURIComponent(j) + "=" + encodeURIComponent(encodeURIComponent( this )) );<br /> });<br /> else<br /> s.push( encodeURIComponent(j) + "=" + encodeURIComponent(encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] )) );</p><p> // Return the resulting serialization<br /> return s.join("&").replace(/%20/g, "+");<br /> }<br />
下載:jquery-encode-gbk.1.2.6.js
下載:jquery-encode-gbk.pack.1.2.6.js
2、jQuery 1.3.2 亂碼解決辦法
1.3.2的就不用這麼麻煩了,因為這個版本簡化了param方法的結構,只需要修改一行代碼即可,因為只有一個地方轉碼了
找到第3737行,同樣包裹一層encodeURIComponent,結果如下:
param: function( a ) {<br /> var s = [ ];</p><p> function add( key, value ){<br /> s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(encodeURIComponent(value));<br /> };<br />
下載:jquery-encode-gbk-1.3.2.js
下載:jquery-encode-gbk-.pack.1.3.2.js
轉載請標明出處 http://blog.csdn.net/shimiso
技術交流群:173711587