现在的位置: 首页 > 综合 > 正文

ecshop ie选择红包AJAX回调函数不执行,FF正常,问题已解决,求高人解释原因!

2012年07月25日 ⁄ 综合 ⁄ 共 1394字 ⁄ 字号 评论关闭

笔者在ECSHOP二次开发时,发现IE购物车结算时选择红包时AJAX回调函数不执行,而FF却是正常。最终虽然修改OK,但具体原因还是未知。请大写一起讨论讨论。

原版的ecshop是没有这一问题的,但笔者使用了JQuery,才出现这一问题,具体JQuery是如何引用的,参见笔者的另一篇博文:ecshop jquery冲突解决方法

废话不说,详情如下:

原始ECSHOP红包选择时的JS代码:shopping_flow.js

/* *
 * 改变红包
 */
function changeBonus(val)
{
/*  if (selectedBonus == val)		// modify by zjm
  {
    return;
  }
  else
  {
    selectedBonus = val;
  }*/
  Ajax.call('flow.php?step=change_bonus', 'bonus=' + val, changeBonusResponse, 'GET', 'JSON');
}

/* *
 * 改变红包的回调函数
 */
function changeBonusResponse(obj)
{
  if (obj.error)
  {
    alert(obj.error);

    try
    {
      document.getElementById('ECS_BONUS').value = '0';
    }
    catch (ex) { }
  }
  else
  {
    orderSelectedResponse(obj.content);
  }
}

AJAX调用代码在changeBonus函数内,IE6中死活不执行回调函数changeBonusResponse,调试时在Ajax.call函数前后加上alert代码,alert代码均正常显示,说明JS代码正常执行,如果有错误的话JS代码会终止,或者说至少后一个alertr代码不会执行。而FF一切正常。

若在changeBonusResponse函数内第一行加上alert代码,IE也不执行。

以上两个问题说明IE中回调函数未执行,但JS也未报错,笔者一直不明白原因。但解决问题还是有办法的,就是不用ECSHOP自身的AJAX调用,改用JQuery的调用:

/* *
 * 改变红包
 */
function changeBonus(val)
{
/*  if (selectedBonus == val)		// modify by zjm
  {
    return;
  }
  else
  {
    selectedBonus = val;
  }*/
  //Ajax.call('flow.php?step=change_bonus', 'bonus=' + val, changeBonusResponse, 'GET', 'JSON');
  $.get('flow.php?step=change_bonus&bonus=' + val, changeBonusResponse);
}

/* *
 * 改变红包的回调函数
 */
function changeBonusResponse(obj)
{	obj = eval('(' + obj + ')');
  if (obj.error)
  {
    alert(obj.error);

    try
    {
      document.getElementById('ECS_BONUS').value = '0';
    }
    catch (ex) { }
  }
  else
  {
    orderSelectedResponse(obj.content);
  }
}

上述代码很简单,相信熟悉JQuery的朋友一定非常熟悉。但笔者一直不明白为什么原来的代码IE6会有问题,请大家踊跃赐教吧

抱歉!评论已关闭.