首页 > 解决方案 > 如何从 Javascript 函数获取数据并将其保存到 php 中用户的自定义元字段?

问题描述

我正在使用一项自动向 Onesignal 注册用户设备的服务。

我通过调用gonative_onesignal_info();内部脚本标签来调用登录功能(完整功能将在下面)。使用 Onesignal 可以完美地注册设备。

现在,根据该服务的文档,我可以通过 AJAX 将其发布到我的服务器,这是我正在努力解决的问题。从服务的文档中,如果您像这样调用 gonative_onesignal_info() :

function gonative_onesignal_info(info) {
    console.log(info);
}

...信息将如下所示:

{
    oneSignalUserId: 'xxxxxxx',
    oneSignalPushToken: 'xxxxxx',
    oneSignalSubscribed: true,
}

这是我的全部功能:

function onesignal_mobile_registration( $user_login, $user ) {

    // Get user data
    $user_id = $user->ID;
    $user_email = $user->user_email;

    ?>

        <script>
            gonative_onesignal_info(info);
        </script>

    <?php

    $oneSignalPushToken = ???;
    update_user_meta( $user_id, 'oneSignalPushToken', $oneSignalPushToken);

}
add_filter( 'wp_login', 'onesignal_mobile_registration', 10, 2 );

那么,如何从该 Javascript 选项中提取oneSignalPushToken并将其存储在 $oneSignalPushToken 中以保存给我的用户?我想我需要使用 AJAX 将其拉出来,对吧?我该怎么做?

标签: javascriptajaxwordpresspostonesignal

解决方案


您不能从 javascript 分配 php 变量,因为 php 在服务器中运行,但 javascript 在浏览器中运行。将 js 数据发送到 php 变量时,您必须$oneSignalPushToken从 php 源获取值或从浏览器调用 ajax:

脚本地点:

<script>
    var data = gonative_onesignal_info(info);
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('GET', 'test.php?oneSignalPushToken=' + data.oneSignalPushToken, true);
    xmlhttp.send();
</script>

测试.php

function onesignal_mobile_registration( $user_login, $user ) {

    // Get user data
    $user_id = $user->ID;
    $user_email = $user->user_email;

    $oneSignalPushToken = $_GET['oneSignalPushToken'];
    update_user_meta( $user_id, 'oneSignalPushToken', $oneSignalPushToken);

}
add_filter( 'wp_login', 'onesignal_mobile_registration', 10, 2 );

推荐阅读