没有 jQuery 的 WordPress AJAX 实时搜索
WordPress AJAX live search without jQuery
我正在尝试在不使用 jQuery 的情况下在 WP 网站上进行 ajax 实时搜索,因为我不想为此功能加载额外的 80kb。我已经让它与 jQuery 一起工作,但是当我尝试重写脚本以与 Vanilla jS 一起工作时,我总是遇到问题
wp-admin/admin-ajax.php 400(错误请求)
工作代码
jQuery.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
type: 'post',
data: { action: 'data_fetch', keyword: jQuery('#keyword').val() },
success: function(data) {
jQuery('#datafetch').html( data );
}
});
无效的原版 JS 代码
var request = new XMLHttpRequest();
request.open('POST', '<?php echo admin_url("admin-ajax.php"); ?>', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.onload = function () {
if (this.status >= 200 && this.status < 400) {
console.log('if');
} else {
console.log('else');
}
};
request.onerror = function() {
console.log('onerror');
};
var data = document.getElementById('keyword').value;
request.send(data);
我在不知道你的问题的情况下看到的明显问题是 request.send(data);
不等于 { action: 'data_fetch', keyword: jQuery('#keyword').val() }
相反你应该写这样的东西 request.send('action=data_fetch&keyword='+data);
此外,根据您传递的数据值,您可能需要对其进行编码。同样,在不确切了解您遇到的问题的情况下很难为您提供帮助。
我正在尝试在不使用 jQuery 的情况下在 WP 网站上进行 ajax 实时搜索,因为我不想为此功能加载额外的 80kb。我已经让它与 jQuery 一起工作,但是当我尝试重写脚本以与 Vanilla jS 一起工作时,我总是遇到问题
wp-admin/admin-ajax.php 400(错误请求)
工作代码
jQuery.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
type: 'post',
data: { action: 'data_fetch', keyword: jQuery('#keyword').val() },
success: function(data) {
jQuery('#datafetch').html( data );
}
});
无效的原版 JS 代码
var request = new XMLHttpRequest();
request.open('POST', '<?php echo admin_url("admin-ajax.php"); ?>', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.onload = function () {
if (this.status >= 200 && this.status < 400) {
console.log('if');
} else {
console.log('else');
}
};
request.onerror = function() {
console.log('onerror');
};
var data = document.getElementById('keyword').value;
request.send(data);
我在不知道你的问题的情况下看到的明显问题是 request.send(data);
不等于 { action: 'data_fetch', keyword: jQuery('#keyword').val() }
相反你应该写这样的东西 request.send('action=data_fetch&keyword='+data);
此外,根据您传递的数据值,您可能需要对其进行编码。同样,在不确切了解您遇到的问题的情况下很难为您提供帮助。