我正在使用WordPress,我试图用纯javascript代替我的jQuery函数。然而,阿贾克斯呼吁给我的问题。这是我成功的jQuery和我不成功的JavaScript:通过AJAX以纯Javascript发送WordPress对象
原始的JQuery
jQuery.ajax({
url: locals.ajax_url,
method: 'post',
context: this,
data: {
action: 'get_more_posts',
page: page,
loop: typeof loop !== 'undefined' ? loop : locals.wp_query
}
});
新的JavaScript
var req = new XMLHttpRequest();
req.open('POST', locals.ajax_url, true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
var l = typeof loop !== 'undefined' ? loop: locals.wp_query;
var s = 'action=get_more_posts&page=' + page + '&loop=' + encodeURIComponent(JSON.stringify(l));
req.send(s);
jQuery的工作,但是JavaScript并不是处理循环变量正确(变量“l”)。
jQuery的发送一个HTTP请求,像这样的东西:
action=get_more_posts&page=2&loop%5Bquery%5D%5Bpage%5D=&loop%5Bquery%5D%5Bpagename%5D=blog&loop%5Bquery_vars%5D%5Bpage%5D=0&loop%5Bquery_vars%5D%5Bpagename%5D=blog&loop%5Bquery_vars%5D%5Berror%5
但JavaScript版本将是这样的:
action=get_more_posts&page=2&loop=%7B%22query%22%3A%7B%22page%22%3A%22%22%2C%22pagename%22%3A%22blog%22%7D%2C%22query_vars%22%3A%7B%22page%22%3A0%2C%22pagename%22%3A%22blog%22%2C%22error
所以jQuery是发送方括号,而JavaScript发送波形括号(除其他外)。
我知道有几种方法可以解决这个问题,但是我无法完成其中的任何一项工作。我很想将请求标题改为“application/json”,但是我不能让wordpress识别其他变量(action,page)。否则,我只需要循环变量正确编码/解码。
这里的变量是否有帮助:
<script>var loop = <?= json_encode($loop); ?>;</script>
这里的PHP函数没有什么帮助(与jQuery的版本有效):
function get_more_posts() {
$args = $_REQUEST['loop']['query'];
$args['paged'] = $_REQUEST['page'];
$loop = new WP_Query($args);
...
}
不知道如果我需要在PHP中的变化或JavaScript,但答案不能涉及任何外部库,并记住我正在使用WordPress。让我知道你是否需要更多信息。提前致谢。
我的ajax有点生疏,但是如果你发送一个查询字符串,你的请求不应该是'GET'而是'POST'吗? –
我只是想复制jquery发送的内容。 –
为什么用JS代替jQuery – GNANA