Неопределенная синтаксическая ошибка jQuery .getJSON Firefox 3

tidycensus не использует свое собственное соглашение по именованию переменных - он использует идентификаторы переменных, как указано в Census API. Например, см. https://api.census.gov/data/2017/acs/acs5/profile/variables.html , который доступен в R с помощью:

library(tidycensus)
dp17 <- load_variables(2017, "acs5/profile", cache = TRUE)

Представленные вами идентификаторы являются кодами FactFinder.

Если вы хотите, чтобы полная таблица DP05 в одном вызове tidycensus, вы можете сделать следующее (например, для округов в Нью-Йорке) с tidycensus 0.9:

dp05 <- get_acs(geography = "county", 
                table = "DP05", 
                state = "NY")

Отображение идентификаторов переменных в их значения в свою очередь доступны с load_variables().

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

10
задан Mike 2 December 2008 в 21:31
поделиться

10 ответов

Я нашел решение ударить ту ошибку

$.ajaxSetup({'beforeSend': function(xhr){
    if (xhr.overrideMimeType)
        xhr.overrideMimeType("text/plain");
    }
});

Теперь объяснение: В firefox 3 (и я принимаю только Firefox ТРИ) каждый файл, который имеет тип пантомимы "text/xml", анализируется и проверяется в синтаксисе. При запуске JSON с" [" он повысит Синтаксическую ошибку, если он запустится с "{" это - "Уродливая Ошибка" (мой перевод для "nicht wohlgeformt"). Если я получаю доступ к своему json-файлу из локального сценария - никакой сервер не включен в этот прогресс - я должен переопределить тип пантомимы... Возможно, Вы устанавливаете свой Тип MIME для того самого файла неправильно...

Как когда-либо, добавляя этот маленький кусочек кода сохранит Вас из сообщения об ошибке

Править: В jQuery 1.5.1 или выше, можно использовать mimeType опцию достигнуть того же эффекта. Для установки его как значения по умолчанию для всех запросов использовать

$.ajaxSetup({ mimeType: "text/plain" });

Можно также использовать его с $ .ajax непосредственно, т.е. вызовы переводят в

$.ajax({
    url: "json/test.js",
    dataType: "json",
    mimeType: "textPlain",
    success: function(data){
        alert(data[0].test);
    } });
23
ответ дан 3 December 2019 в 15:53
поделиться

Попытайтесь переименовать "test.js" к "test.json", который является тем, что говорит Википедия, официальное расширение для файлов JSON. Возможно, это обрабатывается как JavaScript в какой-то момент.

0
ответ дан 3 December 2019 в 15:53
поделиться

Это может звучать действительно действительно немым, но изменить расширение файла для test.js от .js до .txt. У меня было то же самое, происходят с совершенно действительными файлами данных JSON с вполне прилично любым расширением кроме .txt (пример: .json, .i18n). Так как я изменил расширение, я получаю данные и использую их очень хорошо.

Как я сказал, это может звучать немым, но это работало на меня.

1
ответ дан 3 December 2019 в 15:53
поделиться

Вы попытались отключить все расширения Firefox?

Я обычно получаю некоторые ошибки в консоли Firebug, которые вызываются расширениями, не сетями, которые посещают.

0
ответ дан 3 December 2019 в 15:53
поделиться

Какой веб-сервер Вы работаете на этом? У меня когда-то была проблема, читая файл JSON на IIS, потому что он не был определен как допустимый тип MIME.

0
ответ дан 3 December 2019 в 15:53
поделиться

Проверьте, существует ли ; в конце test.js. jQuery выполняется eval("(" + data + ")") и точка с запятой препятствовала бы тому, чтобы Firefox нашел закрывающую скобку. И могли бы быть некоторые другие невидимые символы, который препятствует тому, чтобы он делал так.

Я могу сказать Вам, почему эта удаленная работа местоположения, хотя, это - потому что это выполняется совершенно другим способом. Так как это имеет jsoncallback=? как часть параметров запроса, jQuery думает о нем с JSONP и на самом деле вставляет его в DOM внутри <script> теги. Попробуйте использование "json/test.js?callback=?" как цель, это могло бы помочь также.

0
ответ дан 3 December 2019 в 15:53
поделиться

Попробуйте настроить тип содержимого файла .js. Firefox, по-видимому, ожидает, что он будет текстовым / простым. Вы можете сделать это, как это сделал Питер Хоффманн, или установить на стороне сервера заголовок типа контента.

Это может означать изменение конфигурации на стороне сервера (например, файл apache mime.types), или если json обслуживается из сценарий, устанавливающий заголовок типа содержимого в сценарии.

Или, по крайней мере, мне кажется, что это заставило меня избавиться от ошибки.

0
ответ дан 3 December 2019 в 15:53
поделиться

У меня была аналогичная проблема, но я выполнял цикл for. Я думаю, проблема может заключаться в том, что индекс находится вне пределов диапазона.

  • Kien
0
ответ дан 3 December 2019 в 15:53
поделиться

HI

У меня такая же ошибка при тестировании веб-страницы на моем локальном ПК. , но как только он появляется на сервере хостинга, ошибка больше не возникает. Извините, я понятия не имею о причине, но подумал, что это может помочь кому-то другому найти причину

1
ответ дан 3 December 2019 в 15:53
поделиться

getJSON может настаивать по крайней мере на одной паре имя:значение.
Прямой массив ["item0", "item1", "Item2"] - это правильный JSON, но в функции обратного вызова getJSON на него не на что сослаться.

В этом небольшом массиве Zip-кодов:

{"result":[["43001","ALEXANDRIA"],["43002","AMLIN"],["43003","ASHLEY"],["43004","BLACKLICK"],["43005","BLADENSBURG"],["43006","BRINKHAVEN"]]}

... Я застрял, пока не добавил тег {"result":. После этого я смог сослаться на него:

<script>
       $.getJSON("temp_test_json.php","",
        function(data) {
            $.each(data.result, function(i, item) {
                alert(item[0]+ " " + i);
                if (i > 4 ) return false;
              });
        });
</script>

... Я также обнаружил, что проще использовать $.each().

2
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: