如何从Javascript函数获取数据并将其保存到php中用户的自定义元字段?

时间:2019-12-02 09:55:30

标签: javascript ajax wordpress post onesignal

我正在使用一项服务,该服务会自动在Onesignal中注册用户的设备。

我在登录时通过在脚本标签内调用3.1 Starting the Python Interpreter来调用该函数(完整功能将在下面)。使用Onesignal可以完美注册设备。

现在,根据该服务的文档,我可以通过AJAX将其发布到我的服务器上,这是我一直在努力的目标。从服务文档中,如果您这样调用gonative_onesignal_info():

gonative_onesignal_info();

...信息将如下所示:

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

这是我的全部功能:

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

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

2 个答案:

答案 0 :(得分:3)

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

脚本位置:

$oneSignalPushToken

test.php

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

答案 1 :(得分:1)

了解您的代码的作用很重要:

  • PHP部分将呈现HTML页面
  • 页面完全呈现并投放后,JavaScript部分将在浏览器中执行

这意味着您将无法在生成页面的PHP线程中检索JavaScript变量,原因有两个:

  • JavaScript和PHP执行上下文根本不共享
  • PHP线程结束后,JavaScript将执行

您要做的是在PHP服务器上公开一个终结点,比如说POST URL上的/token。您将使用诸如fetch('/token', { method: 'POST', body: info });之类的代码从JavaScript调用此端点,然后从$_POST全局变量中检索令牌,然后执行update_user_meta( $user_id, 'oneSignalPushToken', $oneSignalPushToken);