Настройка Javascript RequestHeader с синхронизацией XMLHTTPRequest

Позвольте мне немного объяснить вам проблему, я использую сторонний плагин, который запускает интерфейс rest для выполнения команд базы данных над базой данных postgrest. Чтобы ограничить возвращаемые результаты, чтобы я не вызывал все 1000 строк, нужно установить заголовок запроса.

Это информация о плагинах:

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.

Вот мой код: примечание: я собираюсь добавить еще одну переменную, поэтому, когда вы делаете вызов для получения результатов, вы можете установить программируемый лимит, просто пытаясь заставить его работать прямо сейчас.

(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 не работает из-за прохода предварительной проверки, который он отправляет, чтобы убедиться, что сообщение безопасно проходить, не совместимо с моим плагином, Этот код очень ранний альфа-этап, но я разработал сайт для js в социальных сетях примерно за 15 часов. Я просто застрял на этих мелочах из-за недостатка знаний. Я также знаю, что было бы лучше настроить их как асинхронные, но я не могу понять это на всю жизнь, хотя я прочитал меньше постов, которые я, кажется, не могу обдумать.

0 ответов

Другие вопросы по тегам