如何从 Javascript 函数获取数据并将其保存到 php 中用户的自定义元字段?
How do I get data from Javascript function and save it to a user's custom meta field in php?
我正在使用一项服务,该服务会自动将我用户的设备注册到 Onesignal。
我通过在脚本标签内调用 gonative_onesignal_info();
来调用登录时的函数(完整函数将在下面)。使用 Onesignal 可以完美地注册设备。
现在,根据该服务的文档,我可以通过 AJAX POST 它到我的服务器,这正是我正在努力解决的问题。从该服务的文档中,如果您像这样调用 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才能拉出来对不对?我该怎么做?
了解您的代码的作用很重要:
- PHP 部分将呈现一个 HTML 页面
- 页面完全呈现和提供后,JavaScript 部分将在浏览器中执行
这意味着您将无法在生成页面的 PHP 线程中检索 JavaScript 变量,主要原因有两个:
- JavaScript 和 PHP 执行上下文根本不共享
- JavaScript 将在 PHP 线程结束后执行
您需要做的是在 PHP 服务器上公开一个端点,假设 POST
在 /token
URL 上。您将使用 fetch('/token', { method: 'POST', body: info });
等代码从 JavaScript 调用此端点,然后从 $_POST
全局变量中检索令牌,然后执行 update_user_meta( $user_id, 'oneSignalPushToken', $oneSignalPushToken);
行
您不能从 javascript 分配 php 变量,因为在服务器中 php 运行 但在浏览器中 javascript 运行。您必须从 php 源获取 $oneSignalPushToken
值,或者在将 js 数据发送到 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>
test.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 );
我正在使用一项服务,该服务会自动将我用户的设备注册到 Onesignal。
我通过在脚本标签内调用 gonative_onesignal_info();
来调用登录时的函数(完整函数将在下面)。使用 Onesignal 可以完美地注册设备。
现在,根据该服务的文档,我可以通过 AJAX POST 它到我的服务器,这正是我正在努力解决的问题。从该服务的文档中,如果您像这样调用 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才能拉出来对不对?我该怎么做?
了解您的代码的作用很重要:
- PHP 部分将呈现一个 HTML 页面
- 页面完全呈现和提供后,JavaScript 部分将在浏览器中执行
这意味着您将无法在生成页面的 PHP 线程中检索 JavaScript 变量,主要原因有两个:
- JavaScript 和 PHP 执行上下文根本不共享
- JavaScript 将在 PHP 线程结束后执行
您需要做的是在 PHP 服务器上公开一个端点,假设 POST
在 /token
URL 上。您将使用 fetch('/token', { method: 'POST', body: info });
等代码从 JavaScript 调用此端点,然后从 $_POST
全局变量中检索令牌,然后执行 update_user_meta( $user_id, 'oneSignalPushToken', $oneSignalPushToken);
行
您不能从 javascript 分配 php 变量,因为在服务器中 php 运行 但在浏览器中 javascript 运行。您必须从 php 源获取 $oneSignalPushToken
值,或者在将 js 数据发送到 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>
test.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 );