我必须使用XMLHttpRequest,但我不知道函数request.send()
需要哪种数据格式。我现在搜索的时间太长了。
我尝试传递JSON对象,但它不起作用:
var request = new XMLHttpRequest();
request.open("GET","fileApi");
var data = {
action: "read",
targetFile: "testFile"
};
request.addEventListener('load', function() {
if (request.status >= 200 && request.status < 300) {
$("#messageOutput").html(request.responseText);
} else {
console.warn(request.statusText, request.responseText);
}
});
request.send(data);
我得到updateFile:155 XHR finished loading: GET "http://localhost/cut/public/fileApi".
但是服务器上没有收到任何数据。我做了这个简单的检查以批准这个:
PHP(服务器端):
$action = filter_input(INPUT_GET, "action");
$targetFile = filter_input(INPUT_GET, "targetFile");
echo ("action = '$action' | targetFile = '$targetFile'");
exit();
返回: action =''| targetFile =''
不幸的是,我无法在我的应用程序中使用jQuery,因为目标是C#Webbrowser(Internet Explorer),它会检测jQuery文件中的错误并阻止我的脚本工作......
答案 0 :(得分:2)
我不知道函数request.send()
需要哪种数据格式
它可以采用多种格式。字符串或FormData对象是最常见的。它在某种程度上取决于服务器的期望。
我试图传递一个JSON对象
这是一个JavaScript对象,而不是JSON对象。
request.open("GET","fileApi");
您正在发出GET请求。 GET请求不应该有请求正文,因此您根本不应将任何数据传递给send()
。
GET请求期望数据在URL的查询字符串中进行编码。
var data = {
action: "read",
targetFile: "testFile"
};
var searchParams = new URLSearchParams();
Object.keys(data).forEach((key) => searchParams.set(key, data[key]));
var url = "fileApi?" + searchParams;
console.log(url);
// and then…
// request.open("GET", url);
// request.send();
&#13;
警告:URLSearchParams
is new and has limited browser support。找到一个库来生成一个查询字符串留给任何想要与旧浏览器兼容的读者(简单)练习。