我试图让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
有人可以告诉我导致内部服务器错误的原因吗?
提前致谢。
以下是控制台的屏幕截图,显示了带有参数名称的请求标题:&#34; action&#34;和价值:&#34; 0.00&#34;这是正确的POST数据,响应标题显示&#34;内部服务器错误&#34;。所以AJAX请求正在发送,错误是响应PHP ..?
答案 0 :(得分:0)
在Wordpress中使用AJAX时,您需要在能够使用任何全局变量和/或函数之前加载WP。
在您通过AJAX发布的PHP文件的顶部,包括以下行:
require_once( dirname( dirname( __FILE__ ) ) . '/wp-admin/wp-load.php' );
现在已加载WP,您可以使用其所有光荣的功能。