解決echsop兼容jquery(transport.js的沖突)的問題


方案一:

本人親測過,可以用。有的人說需要刪除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,因為這樣每個頁面都會出現沖突了,修復工資也比較麻煩了,能避免盡量避免了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM