使用同步XMLHTTPRequest设置Javascript RequestHeader
让我向您解释一下这个问题,我正在使用一个第三方插件,它运行一个rest接口,用于在postgrest数据库上执行数据库命令。为了限制返回的结果,所以我不调用所有1000行,是为了设置请求头 这是关于以下内容的插件信息:使用同步XMLHTTPRequest设置Javascript RequestHeader,javascript,jquery,postgrest,Javascript,Jquery,Postgrest,让我向您解释一下这个问题,我正在使用一个第三方插件,它运行一个rest接口,用于在postgrest数据库上执行数据库命令。为了限制返回的结果,所以我不调用所有1000行,是为了设置请求头 这是关于以下内容的插件信息: Limiting PostgREST uses HTTP range headers for limiting and describing the size of results. Every response contains the current range and t
Limiting
PostgREST uses HTTP range headers for limiting and describing the size of results. Every response contains the current range and total results:
Range-Unit: items
Content-Range → 0-14/15
This means items zero through fourteen are returned out of a total of fifteen -- i.e. all of them. This information is available in every response and can help you render pagination controls on the client. This is a RFC7233-compliant solution that keeps the response JSON cleaner.
To request limits and offsets translate into ranges and then set the request headers
Range-Unit: items
Range: 0-4
You can also use open-ended ranges for an offset with no limit: Range: 10-.
我正在编写自己的java脚本库来处理项目的其余调用。因此,我试图测试将结果限制为仅返回一行。但是,我得到以下控制台错误:
Uncaught InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.
这是我的代码:注意:我将添加另一个var,这样当您调用以获得结果时,您可以设置限制,只是现在尝试让它工作
(function(window){
function defineCynergi(){
var Cynergi = {};
Cynergi.get = function(url){
var request = makeHttpObject();
request.open("GET", url, false);
request.setRequestHeader('Range-Unit', 'items');
request.setRequestHeader('Range', '0-1');
request.send(null);
return JSON.parse(request.responseText);
}
Cynergi.delete = function(url){
var request = new XMLHttpRequest();
request.open("DELETE", url, false);
request.setRequestHeader('Accept', 'application/:3000+json; version=1');
request.send();
deleteStatus = request.statusText;
return deleteStatus;
}
Cynergi.insert = function(url, data){
var request = new XMLHttpRequest();
request.open("POST", url, false);
request.setRequestHeader('Accept', 'application/:3000+json; version=1');
request.send(JSON.stringify(data));
sentStatus = request.statusText;
return sentStatus;
}
Cynergi.update = function(url, data){
var request = new XMLHttpRequest();
request.open("PATCH", url, false);
request.setRequestHeader('Accept', 'application/:3000+json; version=1');
request.send(JSON.stringify(data));
updateStatus = request.statusText;
return updateStatus;
}
return Cynergi;
}
if(typeof(Cynergi) === 'undefined'){
window.Cynergi = defineCynergi();
}
})(window);
function makeHttpObject() {
try {return new XMLHttpRequest();}
catch (error) {}
try {return new ActiveXObject("Msxml2.XMLHTTP");}
catch (error) {}
try {return new ActiveXObject("Microsoft.XMLHTTP");}
catch (error) {}
throw new Error("Could not create HTTP request object.");
}
是的,我知道使用jquery会更容易,但是我现在做的jquery不起作用,因为它发送了预检查过程,以确保帖子可以安全通过,但与我的插件不兼容。这段代码是非常早期的alpha阶段,但我在大约15小时内开发了一个纯js社交媒体网站。我只是被这些小事情缠住了,因为我缺乏js知识。我也知道将它们设置为异步会更好,但我一辈子都无法理解这一点,尽管我读过count less post,但我似乎无法完全理解它。你知道对setRequestHeader的哪个调用失败了/控制台错误的行号吗?这真的很奇怪,我在取出后重新添加了相同的代码,现在它工作了。很有趣。。。如果在var request=makeHttpObject之后失败,那么这只是一个想法;可能是makeHttpObject函数未按预期工作。如果出现错误,看起来您试图返回不同的对象,这可能解释了为什么它有时会工作。