方案一:
本人親測過,可以用。有的人說需要刪除js目錄下的gobal.js檔案,否則依然會衝突。我沒刪除也解決了衝突。
1、加入JSON2.js檔案
原因很簡單,transport修改Object是為了加入支援JSON的方法。所以我這裡用JSON官網在javascript語言上提供的 json2.js支援具體下載地址json官網
http://www.json.org/js.html
加入json2.js例如{insert_scripts files='transport.js,utils.js,json2.js'}
2、修改transport.js
2.1 註釋掉重寫object的方法,具體搜尋
if ( ! Object.prototype.toJSONString) {
這一段程式碼,然後把裡面的內容全部註釋掉。(我的是註釋掉496-737行)
2.2 加入新的JSON支援方法
function objToJSONString(obj, filter){ return JSON.stringify(obj, filter); } function parseObjectToJSON(object, filter){ return JSON.parse(object, filter); } function objToJSONString(obj, filter){ return JSON.stringify(obj, filter); } function parseObjectToJSON(object, filter){ return JSON.parse(object, filter); }
也可以看到其實都很簡單,都是呼叫json2.js裡面提供的方法,有人覺得不必在這裡新增直接呼叫也可以,但我還是建議做這樣的一個介面卡在這,因為容易容易表明用意。
2.3 修正AJAX方法
2.3.1 在transport.js搜尋params.toJSONString() 改為 objToJSONString(params)
2.3.2 繼續在transport.js搜尋result.parseJSON() 改為 parseObjectToJSON(result)(具體在408行左右)
3、修復舊JSON呼叫地方
簡單來說就是把所有*.toJSONString() 的呼叫改為用objToJSONString(*),而*.parseJSON()改為parseObjectToJSON(*)。
例如: common.js裡面第一個函式裡面的
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + goods.toJSONString(), addToCartResponse, ‘POST’, ‘JSON’);
要改為
Ajax.call(‘flow.php?step=add_to_cart’, ‘goods=’ + objToJSONString(goods), addToCartResponse, ‘POST’, ‘JSON’);
comm.js裡面還有一些Ajax.call呼叫tojsonstring的,都需要按照本例替換。
但非不得已不建議把一切舊的呼叫都修復,應該選擇性的修復,應當出現衝突的地方我們才必須去修復。
就是說哪裡呼叫了jQuery,就把修正後的transport.js及json2.js匯入,並且修復toJSONString和 parseJSON方法,其他頁面幾不必了。
所以說,也不建議在header裡面就加入了jQuery,因為這樣每個頁面都會出現衝突了,修復工資也比較麻煩了,能避免儘量避免了。