Php 在WooCommerce购物车页面的AJAX调用中未加载JavaScript

Php 在WooCommerce购物车页面的AJAX调用中未加载JavaScript,php,ajax,wordpress,woocommerce,Php,Ajax,Wordpress,Woocommerce,我正在使用woocommerce\u-after\u-shipping\u-ratehook添加我的代码,一些PHP,一些JS。在正常的页面加载中,我所有的代码都被完美加载。但是当我从购物车中添加/删除项目,或者在shipping calculator中更新我的地址时,导致可用的shipping方法(使用AJAX)发生更新,我的JS代码不会被加载 也许这只是我错过的一件很基本的事情。以下是我的代码的简单版本: function abc( $method, $index ) { echo

我正在使用
woocommerce\u-after\u-shipping\u-rate
hook添加我的代码,一些PHP,一些JS。在正常的页面加载中,我所有的代码都被完美加载。但是当我从购物车中添加/删除项目,或者在shipping calculator中更新我的地址时,导致可用的shipping方法(使用AJAX)发生更新,我的JS代码不会被加载

也许这只是我错过的一件很基本的事情。以下是我的代码的简单版本:

function abc( $method, $index ) {

    echo "This loaded on AJAX just fine";

    echo "<script type='text/javascript'>";
    echo "var a = 'This is NOT loaded on AJAX call, along with the tags above and below this';";
    echo "</script>";

    echo "This also loaded on AJAX just fine";

}
add_action( 'woocommerce_after_shipping_rate', 'abc', 10, 2 );
函数abc($method,$index){
echo“这在AJAX上加载得很好”;
回声“;
echo“var a=”这不会加载到AJAX调用中,以及该“;”上方和下方的标记;
回声“;
echo“这在AJAX上也加载得很好”;
}
添加行动('woocommerce'在装运费率之后,'abc',10,2);
如果有人想知道,我的JS代码将在页面标题处放置我的JS函数所需的一些变量。变量基于当前加载的可用装运方法

我希望我的JS代码也能加载到AJAX上

感谢您的帮助。谢谢。

可能更像是“黑客”而不是答案

基本上,问题是任何使用
标记的东西都没有加载到DOM(而是从服务器发送到浏览器)。因此,我将
更改为
,并保持内容不变(仍然充满JS)

函数abc($method,$index){
echo“这在AJAX上加载得很好”;
回声“;
echo“var a=”这是您回送所有JS的地方“;”;
回声“;
echo“这在AJAX上也加载得很好”;
}
添加行动('woocommerce'在装运费率之后,'abc',10,2);
然后在
window.load
document.ajaxComplete
上,我从
中复制innerHTML,并创建一个新的
元素,以替换
,其中包含相同的innerHTML

此答案具有替换功能,但适用于整个页面。我只是不得不修改它以适应我的需要


虽然这声音很蠢,但它还是管用的。请注意,我的目标只是编写一些全局JS变量,而不是实际执行JS函数。因此,如果您想这样做,我不知道这种方法是否有效。

您所说的“这不是在AJAX调用中加载的”是什么意思?响应中是否不存在
标记?它是否存在,但未添加到DOM中?或者它存在,添加到dom中,但没有执行?同样,与问题无关,但您忘记了一个
}
@jrswgtr是的,当AJAX完成加载时,这3行不存在。从开始到结束。上面和下面这三条线加载得很好。是的,我错过了一个},谢谢。也许这些行被发送到了浏览器,但是你看不到它们,因为没有添加到DOM,请将输出记录到控制台,我几乎可以肯定脚本标记会在那里。@Triby嘿,你说得对!我在“网络响应负载”选项卡上进行了检查,
以及内容都在那里。我不明白,这是怎么回事?为什么它没有加载到DOM??
function abc( $method, $index ) {

    echo "This loaded on AJAX just fine";

    echo "<div class='response-div' style='display:none;'>";
    echo "var a = 'This is where you echo all your JS';";
    echo "</div>";

    echo "This also loaded on AJAX just fine";

}
add_action( 'woocommerce_after_shipping_rate', 'abc', 10, 2 );