【发布时间】:2015-11-03 05:00:44
【问题描述】:
我正在尝试让 Woocommerce 结帐页面在评论您的订单部分添加折扣,这是由元素的 innerHTML 更改触发的。
我使用的 JavaScript 是:
var discount = 0;
function innerHTMLChanged() {
if (jQuery('#hideDiscount').html() != "oldText") {
console.log("innerHTML has changed!");
discount = jQuery('#hideDiscount').html();
jQuery.ajax({
url: "http://example.site/apply-discount.php",
type: "POST",
data: {
action: jQuery('#hideDiscount').html()
}
}).done(function(data) {
alert( data.message );
});
}
}
// fires every half a second
setInterval(innerHTMLChanged, 500);
apply-discount.php 文件包含:
<?php
$discount = $_POST['action'];
$reverseDiscount = $discount * -1;
function woo_add_cart_fee() {
global $woocommerce;
$woocommerce->cart->add_fee( __('Discount', 'woocommerce'), $reverseDiscount );
}
add_action('woocommerce_cart_calculate_fees','woo_add_cart_fee');
?>
执行代码时,Chrome 控制台输出以下内容:
POST http://example.site/apply-discount.php 500
(Internal Server Error)
m.ajaxTransport.send @ jquery.js?ver=1.11.2:4
m.extend.ajax @ jquery.js?ver=1.11.2:4
innerHTMLChanged @ (index):357
谁能告诉我导致内部服务器错误的原因?
提前致谢。
这是控制台的屏幕截图,显示请求标头的参数名称:“action”和值:“0.00”,这是正确的 POST 数据,响应标头显示“Internal Server Error”。所以AJAX请求正在发送,错误是响应PHP..?
【问题讨论】:
-
错误日志说明了什么?对于
action参数,不要传递html(),而是尝试发送val() -
该元素没有 jQuery val()。它只是一个包含一些文本的 ,这些文本的 innerHTML 是通过另一个 JavaScript 函数更改的。
-
还有错误日志,它说了什么?
-
不完全确定您所说的“错误日志”是什么意思。你只是说控制台输出,如上所述?
-
通过错误日志,我指的是 Web 服务器错误日志。根据您使用的是 Apache 还是 Nginx 或其他一些 Web 服务器,错误将被记录到带有描述或可能提示导致 500 错误的原因的文件中
标签: php jquery ajax wordpress woocommerce