进入合成页面,合成物品,已有数量不会减少。具体链接为:xxx.com/plugin.php?id=wxpet:pet&index=compose&action=view&composeid=142

合成过程中仔细观察发现宠物币是会减少的,但是物品数量不减少,只有刷新后才会变化,这样的问题如何解决呢?

首先开httpfox,开始抓包,点击合成后停止抓包。
得到合成的链接是:xxx.com/plugin.php?id=wxpet:pet&type=ajax&ajaxindex=compose&composeid=142&nums=1&timestamp=1386061116880

通过上述链接,定位到文件是位于ajax下的compose.php。阅读源码,发现其中有个变量$text在xml中并未被引用。看其赋值发现,正是物品数量的变化。

定位到了问题所在就好。这个变量是如何调用的呢?我们返回合成界面,查看源码,观察调用的js,果然存在compose.js文件,跟入文件,发现第28行取出msg的数据,判定长度,如果长度大于0则利用循环处理数量的变化。这个js文件中,从28行到40行就是处理获取变量以及减少当前页面物品数量的部分,大概看了下ajax的说明,下面就把这段代码简要分析下。

	var tmp=xmldoc.getElementsByTagName('msg')[0];
var msg=tmp.firstChild.nodeValue;
if(tmp.attributes.length>0){
var attrname,attrvalue,attrvalue2;
for (var i = 0; i<tmp.attributes.length;i++ ){
attrname=tmp.attributes[i].name;
attrname=attrname.substr(2);
attrvalue=tmp.attributes[i].value;
attrvalue2=$(attrname+'nums').value;
$(attrname).innerHTML=attrvalue2-attrvalue;
$(attrname+'nums').value=attrvalue2-attrvalue;
}
}

第一行,

var tmp=xmldoc.getElementsByTagName('msg')[0];

获取msg的元素节点。
第二行,是获取msg节点中第一个子节点的文本内容。
第三行开始就进入了tmp的循环,如果tmp元素节点的长度大于0,则说明有物品要减少,所以在后面分别取了其name属性来定位要减少的物品id,其value属性来确定要减少的数值。
根据这些推断,修改ajax下的compose.php代码

echo "<msg><![CDATA[{$msg}]]></msg>";

为:

echo "<msg {$text}><![CDATA[{$msg}]]></msg>";

保存文件后刷新合成页面,点击合成发现数量已经会自动变化了。至此,问题解决。

本节教程结束。

Related Posts: 无心宠物-BUG修复系列-16-合成物品数量显示不减少的解决办法 :