我花了两天时间试图解决这个问题,但没有成功。
我通过jQuery AJAX 发送存储在浏览器中的会话到PHP函数,以便将数据保存到WordPress数据库。
在会话中存储数据存储如下-
所以这没有成功:
var dataStorage = JSON.stringify(sessionStorage.getItem('shoppingCart'));
$.ajax({
url: "https://mywebsite.com/wp-admin/admin-ajax.php",
method: "POST",
data: 'globalvar='+dataStorage+'&action=myfunction',
dataType: "json"
}).done(function (response) {});
PHP函数是:
if (!function_exists('myfunction')) {
function myfunction() {
$object = $_POST['globalvar'];
$decoded_object = json_decode($object);
//wordpress update db
update_post_meta('42393', 'menu_items_list', $menu_make_arr);
}
add_action('wp_ajax_myfunction', 'myfunction');
add_action('wp_ajax_nopriv_myfunction', 'myfunction');
}
我在db中得到null,如下所示
4条答案
按热度按时间kd3sttzy1#
首先,sessionStorage已经存储了一个字符串,而你要保存到的var不应该被称为sessionStorage,因为它隐藏了原来的sessionStorage的名字.另外,避免同时使用“var”,使用const和let.
第二,您发送的数据是以URL编码到HTTP请求主体中的(JSON部分可能会出错)。
我的建议是用JSON对所有内容进行编码,因为你已经在用dataType“欺骗协议”了:您提供的“json”(您的实际数据是application/x-www-form-urlencoded,而不是application/json)。
联森:
PHP(🤢语言):
tzdcorbm2#
要在php中读取
application/json
,我们可以使用php://input
代码将如下所示
要将
application/json
从浏览器发送到php,我们可以使用JSON.stringify
代码将如下所示
bvpmtnay3#
有几个方面需要修复/检查:
1.函数定义是否符合您的要求?
你的
检查
myfunction
是否存在,如果不存在此名称的function
,则仅执行内部块。您需要确保您的function
最终存在,并且同名的旧function
不会阻止创建此function
。2.你的JSON格式正确吗?
您正在
json_decode
'ing会话数据,在数据库级别,您需要存储如下的值尝试确保你存储JSON的方式在WordPress中是有效的。
3.检查开发工具的“网络”选项卡
您需要确保您的请求被正确发送,并且您期望发送的JSON最终被发送。
4.确保myfunction最终被执行
向这个
function
添加一些日志记录以查看它是否正在执行也无妨。ulydmbyx4#
我认为sessionStorage是一个保留的关键字,所以它产生了这个问题。你可以调试变量state。这段代码对我很有效。
PHP代码-只是为了调试而删除了几行代码