好吧,我花了很多时间将非 AJAX 购物车结账变成 AJAX 结账。
我通过使用 jQuery UI 选项卡将各个部分分成选项卡来做到这一点。然后我使用 AJAX 在一个选项卡上发布更改并有选择地刷新其他选项卡。选择性刷新只是抓取帖子的结果,并使用 jQuery 选择器从响应中抓取相关的 div。
在这种特殊情况下,带有运输信息的选项卡正在发布并刷新带有运输方式列表的选项卡。
除了一个浏览器之外,这可以完美运行:Firefox 3.6.x(Mac 和 Windows)
在 Firefox 3 中,选择器从 POST 的结果中拉回截断的结果,这有效地删除了关键按钮并阻止用户继续操作。
这是完整的 html 响应,带有格式:
编辑:以上显然不是 100% 与实际输出一致。这是真正的 RAW 输出: http: //pastebin.com/ChAT1vLf
这是 JavaScript 的相关行:
jQuery("#shipping-method-section").html(output.html());
以下是所有其他浏览器在该行中撤回的内容:
<!--- shipping method section --->
<h2>Select a shipping method:</h2>
<ul id="shipping-methods">
<li><span><label><input name="shipmethod" value="FedEx+Priority+Overnight" class="shopp shipmethod" type="radio"> FedEx Priority Overnight — <strong>$30.68</strong> <span>Estimated Delivery: September 28, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+Standard+Overnight" class="shopp shipmethod" type="radio"> FedEx Standard Overnight — <strong>$26.46</strong> <span>Estimated Delivery: September 28, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+2Day" class="shopp shipmethod" type="radio"> FedEx 2Day — <strong>$19.10</strong> <span>Estimated Delivery: September 29, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+Express+Saver" class="shopp shipmethod" type="radio"> FedEx Express Saver — <strong>$18.79</strong> <span>Estimated Delivery: September 30, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+Home+Delivery" class="shopp shipmethod" checked="checked" type="radio"> FedEx Home Delivery — <strong>$13.52</strong> <span>Estimated Delivery: September 27, 2011</span> </label> </span> </li>
</ul>
<hr>
<div class="tab-back-button">
<input class="tab-back-button" value="Shipping Address" type="button">
</div>
<input value="Payment Method" name="shipping-method-section-button" class="shipping-method-section-button" type="button">
以下是 Firefox 3.6.x 撤回的内容:
<h2>Select a shipping method:</h2>
<ul id="shipping-methods">
<li><span><label><input name="shipmethod" value="FedEx+Priority+Overnight" class="shopp shipmethod" type="radio"> FedEx Priority Overnight — <strong>$30.68</strong> <span>Estimated Delivery: September 28, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+Standard+Overnight" class="shopp shipmethod" type="radio"> FedEx Standard Overnight — <strong>$26.46</strong> <span>Estimated Delivery: September 28, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+2Day" class="shopp shipmethod" type="radio"> FedEx 2Day — <strong>$19.10</strong> <span>Estimated Delivery: September 29, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+Express+Saver" class="shopp shipmethod" type="radio"> FedEx Express Saver — <strong>$18.79</strong> <span>Estimated Delivery: September 30, 2011</span> </label> </span> </li>
<li> <span> <label><input name="shipmethod" value="FedEx+Home+Delivery" class="shopp shipmethod" checked="checked" type="radio"> FedEx Home Delivery — <strong>$13.52</strong> <span>Estimated Delivery: September 27, 2011</span> </label> </span> </li>
</ul>
我找不到任何押韵或理由。
作为临时解决方法,我编写了一些 JavaScript 来检测 Firefox 3 并强制完全刷新以使它们进入下一个选项卡。
有人对如何使其正常工作有任何想法吗?
谢谢!克里夫
编辑。这是完整的 JavaScript:
jQuery.post( url, data, function(output) {
if(error_check_passed(output, "FedEx"))
{
jQuery("#shipping-section").css({ 'opacity' : 1.0 });
update_cart_summary(output);
hide_errors();
output = jQuery("#shipping-method-section", jQuery(output));
jQuery("#shipping-method-section").html(output.html());
allowTabChange = true;
jQuery("#checkout-tabs").tabs('select', 1);
}
else
{
jQuery("#shipping-section").fadeTo('fast', 1.0);
show_errors(output, "FedEx");
}
});