我正试图通过Wordpress创建一个API,公开一些后端数据。我得出的结论是,我不能让一个独立的页面(插件)公开这些数据,因为Wordpress总是试图调用它,而它背后一定有某种动作挂钩。
我的解决方案是创建一个AJAX调用,其中不包含触发它的事件,而是一个URL。在主题函数中。php文件我创建了两个动作挂钩:
add_action(\'wp_ajax_nopriv_do_ajax\', \'ajax_return_catalog_info\');
add_action(\'wp_ajax_do_ajax\', \'ajax_return_catalog_info\');
使用我的方法:
function ajax_return_catalog_info() {
switch($_REQUEST[\'fn\']) {
case \'ajax_call_1\':
// do ajax method 1 here
echo json_encode($output);
break;
case \'ajax_call_2\':
// do ajax method 2 here
echo json_encode($output);
break;
}
}
现在,使用以下URL通过web浏览器调用AJAX:
http://mywebsite.com/wp-admin/admin-ajax.php?action=do_ajax&fn=get_brand&id=579
这似乎返回了JSON,这正是我所期望的,但我的浏览器似乎不知道它是JSON,因为它缺少了一些通常从我省略的JavaScript返回的头信息。
我向社区提出的问题是,是否有更好的方法来做到这一点<我是不是走错了路?
非常感谢
最合适的回答,由SO网友:Barry Carlyon 整理而成
你需要一个模具();在函数的}关闭之前,您可能希望添加相关的php头来告诉浏览器它的内容类型
我不担心浏览器返回错误的内容类型。
只要加载数据的代码将其视为JSON
因此,对于您的函数,请尝试以下操作
function ajax_return_catalog_info() {
header(\'Content-type: application/json\');
switch($_REQUEST[\'fn\']) {
case \'ajax_call_1\':
// do ajax method 1 here
echo json_encode($output);
break;
case \'ajax_call_2\':
// do ajax method 2 here
echo json_encode($output);
break;
}
die();
}
如果您没有死,那么最后也会出现一个0,因为它会折叠回Ajax调用函数(返回echo 0;die();