【发布时间】:2020-11-20 16:16:47
【问题描述】:
我已经解决这个问题几个小时了,我很难理解为什么会发生这个错误。
在我的 JS 中,我有以下 ajax:
var $ = jQuery; // define jquery
let name = "Mark";
let pies = "cherry";
$(document).ready(function(){
$.ajax({
type : 'POST',
dataType : 'json',
url : ajaxurl,
nonce: nonce,
data : {
action: 'myfunction',
name: name,
pies: pies,
nonce: nonce
}
}).done(function(response) {
console.log(response);
});
}); // end document ready
在我的插件的 PHP 中,我有
function myfunction() {
if ( wp_verify_nonce( $_POST['nonce'], 'registration_nonce')) {
$name = $_POST['name'];
$pies = $_POST['pies'];
file_put_contents('debug_output.txt', $pies);
die();
}
}
add_action( 'wp_ajax_myfunction', 'myfunction' );
add_action( 'wp_ajax_nopriv_myfunction', 'myfunction');
这每次给我 400。这应该是一件简单的事情,我通常一直这样做,但由于某种原因,我严重遗漏了一些东西。有什么想法吗?我将它削减到最低限度,但仍然没有运气。 ajax URL 和 nonce 都很好。 WP 有什么变化吗?
【问题讨论】:
-
你的payload中的
wpnonce是你之前定义的变量吗?它包含什么? -
@El_Vanja wpnonce 是一个已定义的变量,并正确显示在有效负载中。在 devtools 中检查请求时,我确实注意到它显示为 formdata,因此我尝试删除
dataType: "json",甚至以 JSON 格式发送并使用 stringify。没有运气。 -
也许你的动作钩子没有被 WordPress 及时注册,所以 WordPress 不知道它们的存在,因此出现了错误的请求响应? (下面的迭戈也提出了建议)。您能否创建一个精简版的插件,以便我们帮助您调试它? (见How to Create a Minimal, Reproducible Example。)