javascript - 使用纯 Javascript 通过 AJAX 发送 WordPress 对象

标签 javascript php json ajax wordpress

我在 WordPress 工作,我正在尝试用纯 javascript 替换我的 jQuery 函数。但是,ajax 调用给我带来了问题。这是我成功的 jQuery 和我不成功的 JavaScript:

原始 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 发送波浪形括号(除其他外)。

我知道有几种方法可以解决这个问题,但我无法完全让其中任何一种发挥作用。我很想将请求 header 更改为“application/json”,但是我无法让 wordpress 识别其他变量(操作、页面)。否则,我只需要循环变量来正确编码/解码。

如果有帮助,这里是变量:

<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。如果您需要更多信息,请告诉我。提前致谢。

最佳答案

想通了。我没有正确解析请求。我需要添加 stripslashes,然后我缺少 json_decode 的第二个参数来返回数组而不是对象。

function get_more_posts() {
  $loop = json_decode(stripslashes($_REQUEST['loop']), true);
  $args = $loop['query'];
  $args['paged'] = $_REQUEST['page'];
  $loop = new WP_Query($args);
  ...
}

希望这对其他人尝试类似的事情有所帮助。

关于javascript - 使用纯 Javascript 通过 AJAX 发送 WordPress 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44877023/

相关文章:

php - 无法从 iOS 添加到 MySQL 的条目

c# - Web API JSON 响应

javascript - 允许的 html/css/javascript - 类语法

javascript - MomentJS 将 'a day ago' 更改为 '1d'

php - 是否可以将 PHP 连接到 SQL Server Compact Edition?

Javascript 使用变量作为键来获取嵌套对象值

javascript - 获取 API 请求的输出(客户端)

javascript - 在 Jquery onClick 中重新启动 slider ?

javascript - JavaScript 的嵌套函数是如何工作的?

php - 如何从 mysql 数组检索数据并在表单中选中复选框