javascript - 使用 Vanilla JS 在 wordpress 中通过 ajax 发送 json
问题描述
我正在使用 vanilla JS 在我的服务器中发送一个 json,它返回一个错误的请求,似乎服务器只需要一个键值对,如“page=pageData&action=act”,当我这样做时它可以工作,但我想发送数据那样。有没有办法让它成为可能?当我尝试在 jquery 中制作它时,它工作正常。
$('.more-headlines').on('click', function() {
var pageData = $(this).data('page');
var pageURL = $(this).data('url');
var act = 'load_more';
var jsondata = {
page : pageData,
action : act
}
var xhr = new XMLHttpRequest();
xhr.open('POST', pageURL, true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.onload = function() {
if (xhr.status >=200 && xhr.status < 400) {
var data = JSON.parse(xhr.responseText);
console.log(data);
} else {
console.log('sad');
}
};
xhr.send(JSON.stringify(jsondata));
});
这是我在 jquery 中的代码
$('.more-headlines').on('click', function () {
var that = $(this);
pageData = $(this).data('page');
newPage = pageData+1;
pageURL = $(this).data('url');
act = 'load_more';
that.addClass('icon-spin');
that.find('span').html('loading headline');
jsondata = {
page : pageData,
action : act
}
$.ajax ({
type: 'POST',
url: pageURL,
data: jsondata,
success: function(response) {
setTimeout( function () {
that.data('page', newPage);
$('#featureOnDemand ul').append(response);
that.removeClass('icon-spin');
that.find('span').html('See more headlines');
}, 500);
}
});
});
我查看了 chrome 中的网络选项卡,我看到发送请求变成了一个键值对,例如“page=pageData&action=act”。我被困在这部分是因为我想在我的项目中发出一个 vanilla js ajax 请求。任何想法都会非常感激。非常感谢!
解决方案
您想要序列化您的对象数据。这是一个帮助函数,您可以将对象传递到:
var serializeObject = function (obj) {
var serialized = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
serialized.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
}
return serialized.join('&');
};
推荐阅读
- java - 调试错误:java.lang.ClassCastException:java.lang.Long 无法转换为 java.util.List
- c - 我们如何使用 glade 和 C 创建一个简单的 GUI 应用程序?
- python - 为什么我不能从同级文件夹导入?
- tfs - 为什么 TFS Build Get Sources 返回错误 255?
- automation - 如果我使用 Cypress 和 appium,我需要 2 个自动化框架而不是 1 个带有 webdriver/appium 的框架。1 个框架更可取吗?
- javascript - 使用模板标签时密码字段中缺少眼睛图标
- node.js - 使用 AWS Lambda 函数连接到 Kubernetes
- sql - 在 oracle sql 中创建用户和密码
- java - Android:活动全屏透明操作栏不起作用?
- android - Android Studio 4.1+ 模拟器侧边栏?