Проверьте, нет ли ответа JSON

Я получаю некоторые данные от MySQL через JSON. Однако я хочу настроить, является ли ответ пустым или нет, поэтому, если он не пуст, я покажу возвращаемую информацию, иначе я покажу сообщение.

Я попробовал несколько возможных решений, таких как проверка длины ответа JSON, проверьте, есть ли элемент Severity, и если не считать, что это null и т. Д.

Вот фрагмент моего кода:

var data = $.ajax({
    type: 'GET',
    url: 'http://www.mydomain.com/php/loaddata.php?&jsoncallback=?',
    dataType: 'JSONp',
    timeout: 5000,
    success: function(data) {
        $.each(data, function(i,item){
            if (item.Severity == 1) {   
               //Do Something
                .....

When JSON finds data, the reply is something like this: UPDATED:

([{"Severity":"1","Latitude":"35.872883","Longitude":"14.449133","Address":"Some Address 1","Heading":"25","Timestamp":"2012-12-28 10:15:03"},{"Severity":"2","Latitude":"35.871269","Longitude":"14.501580","Address":"Some Address 2","Heading":"80","Timestamp":"2012-12-28 10:15:31"}]);

Иначе, если данные не найдены, JSON возвращает:

([]);
1
Вам нужно отменить это выражение
добавлено автор Kevin Bowersox, источник
Вам нужно отменить это выражение
добавлено автор Kevin Bowersox, источник
if (data = '([])')
добавлено автор Bhavin Rana, источник
if (data = '([])')
добавлено автор Bhavin Rana, источник
if (data = '([])')
добавлено автор Bhavin Rana, источник
Не уверен, что делает jQuery, но ([]) кажется недействительным. Возможно, я ошибаюсь из-за JSONP.
добавлено автор dvcrn, источник
Звучит как проблема разбора json. Я бы попробовал добавить $. ParseJSON
добавлено автор dvcrn, источник
Звучит как проблема разбора json. Я бы попробовал добавить $. ParseJSON
добавлено автор dvcrn, источник
Звучит как проблема разбора json. Я бы попробовал добавить $. ParseJSON
добавлено автор dvcrn, источник
Пожалуйста, не такой подход! ;)
добавлено автор Luca Trazzi, источник
Пожалуйста, не такой подход! ;)
добавлено автор Luca Trazzi, источник
Пожалуйста, не такой подход! ;)
добавлено автор Luca Trazzi, источник
@Cerbrus Console.log возвращает "string"
добавлено автор user1809790, источник
@Cerbrus Console.log возвращает "string"
добавлено автор user1809790, источник
@Cerbrus Console.log возвращает "string"
добавлено автор user1809790, источник
@ryadavilli Да, но это не сработало. Я попытался, если (data.length === 0)
добавлено автор user1809790, источник
@ryadavilli Да, но это не сработало. Я попытался, если (data.length === 0)
добавлено автор user1809790, источник
@Dabido: Это просто использует JSON.parse под капотом.
добавлено автор Cerbrus, источник
@Dabido: Это просто использует JSON.parse под капотом.
добавлено автор Cerbrus, источник
@Dabido: Это просто использует JSON.parse под капотом.
добавлено автор Cerbrus, источник
Итак, если данные пустые, возвращается точно ? ( console.log (тип данных, данных); )
добавлено автор Cerbrus, источник
Итак, если данные пустые, возвращается точно ? ( console.log (тип данных, данных); )
добавлено автор Cerbrus, источник
Вы проверили data.length?
добавлено автор ryadavilli, источник
Это странно. Если вы получите пустой массив, данные будут фактически массивом с длиной 0.
добавлено автор ryadavilli, источник
Вы проверили data.length?
добавлено автор ryadavilli, источник
@Bhavin: по крайней мере, «==» или «===» не «=», я дал ответ, используя casting to string (который работает большую часть времени для этого), но поскольку он был быстро downvoted, я думаю, что это не то, что вы искали (я удалил его). Также небольшое замечание: безопаснее отправлять объект, содержащий ваш массив, чем ваш массив напрямую (некоторые инструменты считают, что json должен начинаться с объекта и, следовательно, не анализирует их правильно)
добавлено автор Flavien Volken, источник
@Bhavin: по крайней мере, «==» или «===» не «=», я дал ответ, используя casting to string (который работает большую часть времени для этого), но поскольку он был быстро downvoted, я думаю, что это не то, что вы искали (я удалил его). Также небольшое замечание: безопаснее отправлять объект, содержащий ваш массив, чем ваш массив напрямую (некоторые инструменты считают, что json должен начинаться с объекта и, следовательно, не анализирует их правильно)
добавлено автор Flavien Volken, источник
@Bhavin: по крайней мере, «==» или «===» не «=», я дал ответ, используя casting to string (который работает большую часть времени для этого), но поскольку он был быстро downvoted, я думаю, что это не то, что вы искали (я удалил его). Также небольшое замечание: безопаснее отправлять объект, содержащий ваш массив, чем ваш массив напрямую (некоторые инструменты считают, что json должен начинаться с объекта и, следовательно, не анализирует их правильно)
добавлено автор Flavien Volken, источник

8 ответы

Поскольку: Console.log возвратил "string" -

Я бы добавил && data! == null к этому решению. Когда jQuery пытается проанализировать строку, которая не является json, она вернет null .
добавлено автор dvcrn, источник
@Dabido: Хорошая идея, спасибо!
добавлено автор Cerbrus, источник

Убедитесь, что выражение отрицается.

success: function(data) {
    if(data.length != 0){
        $.each(data, function(i,item){
            if (item.Severity == 1) {
                //Do something
            }
        });
    }
}
0
добавлено

([]) is not valid json and therefore can't be parsed. [] is.

Это вызовет синтаксическую ошибку:

var json = "([])";
var obj = JSON.parse(json);
console.log(obj.length);

Пока это работает и выведет 0:

var json = "[]";
var obj JSON.parse(json);
console.log(obj.length);

JSFiddle here - http://jsfiddle.net/m9LUm/1/

0
добавлено

Проверьте этот фрагмент

var result="[]";//this is your json string result
var parsed=jQuery.parseJSON(result); //this is now an array! so we can check the length

if(parsed.length==0)
    alert("Error")
0
добавлено
да, но результат - ваши данные :)
добавлено автор Luca Trazzi, источник
в обоих примерах, которые он опубликовал, были массивы, а не объекты, поэтому я предположил, что мы работаем только с массивами
добавлено автор Luca Trazzi, источник
@LucaTrazzi в моем случае, где мне нужно будет поместить этот код? Под функцией успеха? (извините - я n00b в этом :()
добавлено автор user1809790, источник
Это не будет работать, если результатом JSON является объект. Объекты не имеют свойства .length . (Ответы JSON чаще всего не являются объектами)
добавлено автор Cerbrus, источник

данные, которые вы получите на успех, - это JSON, так что сначала вы должны разобрать его, так что это будет для вас

var x = jQuery.parseJSON(data)//this will give you array 
if(x.length == 0) {
    alert("empty");
}
0
добавлено
@sourecode Я пробовал это, но это дало мне ошибку: Uncaught TypeError: Невозможно прочитать свойство 'length' из null
добавлено автор user1809790, источник
@sourcode: не работает ни
добавлено автор user1809790, источник
попробуйте это также jQuery.isEmptyObject (data) - sourcecode
добавлено автор sourcecode, источник
используйте этот A.splice (0, A.length), а также вы можете использовать stringyfy (), который даст вам строку emty, тогда вы можете проверить на пустой
добавлено автор sourcecode, источник

Использование кастинга позволит движку JS выполнить синтаксический анализ:

if (""+data == "")
{
alert("Data is empty");
}

Примечание: только пустая строка или пустой массив (который может рекурсивно содержать другие пустые строки/массивы) сделает это условие выполненным, что соответствует вашему требованию

0
добавлено
Хм, я думаю, что отличать данные до строки - довольно уродливый способ проверить, пуст ли он, тем более, что данные (ответ) - это строка.
добавлено автор Cerbrus, источник
Результат (json) из PHP всегда является строкой. (Если вы не возвращаете изображения и т.п.)
добавлено автор Cerbrus, источник
Я так не думаю, иначе вопрос неточный: data = [{"key": "val"}]; И не data = "[{\" key \ ": \" val \ "}]"; что совершенно не то же самое.
добавлено автор Flavien Volken, источник
Хорошо, это связано с типом dataType, теперь спецификация dataType на «json» заставит jQuery проанализировать его для вас (и вернуть обработанный объект). Теперь я предположил, что «JSONp» действует так же, как «json», что должно быть в соответствии с документом (но никогда не пробовалось): api.jquery.com/jQuery.getJSON
добавлено автор Flavien Volken, источник
Хорошо, я восстановил свой ответ. Если вы считаете, что это не сработает, объясните, почему.
добавлено автор Flavien Volken, источник

Использование кастинга позволит движку JS выполнить синтаксический анализ:

if (""+data == "")
{
alert("Data is empty");
}

Примечание: только пустая строка или пустой массив (который может рекурсивно содержать другие пустые строки/массивы) сделает это условие выполненным, что соответствует вашему требованию

0
добавлено
Результат (json) из PHP всегда является строкой. (Если вы не возвращаете изображения и т.п.)
добавлено автор Cerbrus, источник
Хм, я думаю, что отличать данные до строки - довольно уродливый способ проверить, пуст ли он, тем более, что данные (ответ) - это строка.
добавлено автор Cerbrus, источник
Я так не думаю, иначе вопрос неточный: data = [{"key": "val"}]; И не data = "[{\" key \ ": \" val \ "}]"; что совершенно не то же самое.
добавлено автор Flavien Volken, источник
Хорошо, это связано с типом dataType, теперь спецификация dataType на «json» заставит jQuery проанализировать его для вас (и вернуть обработанный объект). Теперь я предположил, что «JSONp» действует так же, как «json», что должно быть в соответствии с документом (но никогда не пробовалось): api.jquery.com/jQuery.getJSON
добавлено автор Flavien Volken, источник
Хорошо, я восстановил свой ответ. Если вы считаете, что это не сработает, объясните, почему.
добавлено автор Flavien Volken, источник

Использование кастинга позволит движку JS выполнить синтаксический анализ:

if (""+data == "")
{
alert("Data is empty");
}

Примечание: только пустая строка или пустой массив (который может рекурсивно содержать другие пустые строки/массивы) сделает это условие выполненным, что соответствует вашему требованию

0
добавлено
Результат (json) из PHP всегда является строкой. (Если вы не возвращаете изображения и т.п.)
добавлено автор Cerbrus, источник
Хм, я думаю, что отличать данные до строки - довольно уродливый способ проверить, пуст ли он, тем более, что данные (ответ) - это строка.
добавлено автор Cerbrus, источник
Я так не думаю, иначе вопрос неточный: data = [{"key": "val"}]; И не data = "[{\" key \ ": \" val \ "}]"; что совершенно не то же самое.
добавлено автор Flavien Volken, источник
Хорошо, я восстановил свой ответ. Если вы считаете, что это не сработает, объясните, почему.
добавлено автор Flavien Volken, источник
Хорошо, это связано с типом dataType, теперь спецификация dataType на «json» заставит jQuery проанализировать его для вас (и вернуть обработанный объект). Теперь я предположил, что «JSONp» действует так же, как «json», что должно быть в соответствии с документом (но никогда не пробовалось): api.jquery.com/jQuery.getJSON
добавлено автор Flavien Volken, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp