Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用纯Javascript通过AJAX发送WordPress对象_Javascript_Php_Json_Ajax_Wordpress - Fatal编程技术网

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

使用纯Javascript通过AJAX发送WordPress对象,javascript,php,json,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 !=

我在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\u vars%5Bpage%5D=0&loop%5Bquery\u vars%5D%5Bpagename%5D=blog&loop%5Bquery\u vars%5D%5Berror%5

但是javascript版本发送如下内容:

action=get_more_posts&page=2&loop=%7B%22query%22%3A%7B%22page%22%3A%2C%22pagename%22%3A%22blog%22%7D%2C%22query_vars%22%3A%7B%22page%22%3A0%2C%22pagename%22%3A%22blog%22%2C%22错误

因此jQuery发送方括号,而javascript发送扭曲的括号(以及其他内容)

我知道有几种方法可以解决这个问题,但我无法让它们中的任何一种起作用。我很想将请求头更改为“application/json”,但是我无法让wordpress识别其他变量(action,page)。否则,我只需要循环变量来正确编码/解码

以下是变量(如果有帮助):

<script>var loop = <?= json_encode($loop); ?>;</script>

不确定我是否需要在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);
  ...
}

希望这对其他人尝试类似操作有所帮助。

我的ajax有点生疏,但是如果发送查询字符串,您的请求不应该是“GET”而不是“POST”吗?我只是尝试复制jquery发送的内容。为什么要用JSQuery替换jquery,这样我就不必加载jquery库了?这有什么关系?
function get_more_posts() {
  $loop = json_decode(stripslashes($_REQUEST['loop']), true);
  $args = $loop['query'];
  $args['paged'] = $_REQUEST['page'];
  $loop = new WP_Query($args);
  ...
}