Ошибка заголовка запроса при получении - AJAX / JavaScript

У меня есть простой скрипт, пытающийся получить доступ к общедоступным данным, предоставленным USGS в качестве конечной точки JSON. Прямо сейчас скрипт возвращает код статуса HTTP 0: 'undefined', который, как я понимаю, является общим кодом статуса, который может означать множество вещей. Урезанный код, который я пытался проверить:

<script type = "text/javascript">
$('#query').click(function() {
    var jqxhr = $.ajax({
        url: 'https://waterservices.usgs.gov/nwis/iv/?format=json&sites=08170500&parameterCd=00060',
        type: 'get',
        dataType: 'json',
        beforeSend: function(xhr) {
            xhr.setRequestHeader('Content-Type', 'application/json');            
            xhr.setRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
            xhr.setRequestHeader('Accept-Encoding', 'gzip, deflate, br');
            xhr.setRequestHeader('Accept-Language' , 'en-US,en;q=0.5');
            xhr.setRequestHeader('Connection' , 'keep-alive');
            xhr.setRequestHeader('Host' , 'waterservices.usgs.gov');
            xhr.setRequestHeader('Upgrade-Insecure-Requests' , '1');
            xhr.setRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36');
        }
    })
    .done(function () {
        alert( "success");
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
        alert("failure");
        $('#sitedesc').text(jqXHR.status + ' - ' + jqXHR.responseText);
    })
    .always(function() {
        alert("complete");
    });
});
</script>

Я сузил, что функция beforeSend, по-видимому, вызывает проблему, что заставило меня подумать, что это проблема CORS. Но в документации служб водоснабжения USGS прямо указано, что служба поддерживает CORS (https://waterservices.usgs.gov/rest/IV-Service.html#CORS).

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

У кого-нибудь есть понимание? Спасибо!

Отказ от ответственности: я не инженер-программист, и JavaScript не моя сильная сторона :)

Я удалил обработчик beforeSend, и он работает нормально. Если вы можете открыть URL-адрес в своем браузере (что вы можете), то вы знаете, что обычный метод GET работает нормально, без каких-либо конкретных заголовков.

Reinstate Monica Cellio 26.09.2018 20:50

Хм, это странно. Здесь, на моей рабочей машине, если я удалю обработчик beforeSend, я получу 403 запрещенную ошибку. Для проверки я загрузил скрипт на внешний веб-сервер, и он сработал. Должно быть что-то с моей рабочей сетью. Спасибо.

Auz Beauxdine 26.09.2018 20:55

Без проблем. Вы пробовали просто открыть URL без использования скрипта? Как я уже сказал, поскольку это запрос GET, он имеет тот же эффект, что и использование сценария, но часто может помочь вам понять, в чем проблема.

Reinstate Monica Cellio 26.09.2018 20:58

Да, запуск его непосредственно с URL-адреса был успешным из getgo, поэтому я смог понять, что это как-то связано с JS, выполняющим запрос в браузере. Я получаю ошибку 403 при выполнении скрипта в Chrome / Edge / Firefox, но он работает в IE. Похоже, это какая-то настройка или протокол сетевой безопасности в нашей рабочей сети, и наша сетевая группа изучает это.

Auz Beauxdine 27.09.2018 22:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
31
0

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