Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Не выводит информацию json

Суть в том что ищу в файле переменную ID И просто он всегда отвечает False прошу помочь

Проблема в скрипте как по мне:сам скрипт
Фаил с которого берется переменная id

{
        r: /^Передать\s?([0-9]+)?\s?([0-9]+)?/i,
        f: function (msg, text1,text2) {
                text1 = Number(text1)
                const findedUser = Object.values(users).find(gdgdf => (
                    gdgdf.id === text1
                ));
                console.log('findedUser', findedUser);
        }
    },
Ответ: Дак я исходник дал скрипта
Вопрос: Как получить полученные json данные из вне функции

Есть файл json.php, который генерирует json данные такого вида:
json.php
[{"id":"1","par1":"par1","par2":"par2"},
{"id":"2","par1":"par1","par2":"par2"},
{"id":"3","par1":"par1","par2":"par2"}]

есть файл которые принимает данные и обрабатывает. в данном случае выводит значение json данных
index.
$.post(
"json.php",
onAjaxSuccess
);

function onAjaxSuccess(data){
data = JSON.parse(data);
alert( data[0]['id'] );
}

...тут


Задача состоит в том, как вывести тот же (data[0]['id']) значение, но из вне функции (...тут)

Не судите строго, решение очень необходимо.
Заранее спасибо всем!!!
Ответ: dztop
Представьте, что setTimeout - это асинхронный запрос.

<button>Проверка ответа</button>
<script>
   var answer = 'Нет ответа';

   setTimeout(onAjaxSuccess, 5000);

   function onAjaxSuccess(data) {
      data = 'Ответ получен';
      answer = data;
      document.querySelector('button').click();
   };
   
  // тут
   document.querySelector('button').onclick = function() {
       alert(answer);
   };
</script>
Вопрос: Не выводит информацию из json

Суть в том что делаю запрос на файл с поиском ID И просто он всегда отвечает False прошу помочь

Фаил с которого берется переменная id

{
        r: /^Передать\s?([0-9]+)?\s?([0-9]+)?/i,
        f: function (msg, text1,text2) {
                text1 = Number(text1)
                const findedUser = Object.values(users).find(gdgdf => (
                    gdgdf.id === text1
                ));
                console.log('findedUser', findedUser);
        }
    },
Ответ:
Сообщение от Malleys
Вы могли бы показать окружающий код, как у вас получается переменная users, как вы читаете из файла. Проблема-то может быть в том, что функция findedUser работает с искажёнными данными, типы не совпадают и т. д.
Держите
Вопрос: Reactjs search bar с данными .json

Добрый день! Знания React'а довольно скудные, в процессе изучения и выполнения заданий возник вопрос.
Задача стоит в следующем:
необходимо сделать список контактов с мгновенным search bar'ом. Сложность для меня заключается в том, что данные (контакты) находятся в отдельном файле .json , я не знаю как правильно его "внедрить" в документ .html, как правильно обращаться к массивам и объектам внутри них конкретно в этой ситуации. Смотрела множество примеров реализации мгновенного поиска контактов в списке, но все данные контактов были помещены в переменную и находились непосредственно в документе .html .
Вот, собственно , недокод, который должен выводить имена списком из документа .json
import React from 'react'
    import {render} from 'react-dom'
    import JSON from 'clients'
    var ClientsData = JSON.parse(fs.readFileSync('./clients.json'));
            var ClientsList = React.createClass({
                render: function() {
                    return(
                      <div>
                        <ul>
                            {
                            ClientsData.map( function(el){
                                return <li> {el.firstName} </li>;
                            })
                            }
                         </ul>
                      </div>
                     );
                }
            });
            ReactDOM.render(
                    <ClientsList />,
            document.getElementById("clients_list")
            );


В html это выглядит так:
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css1.css" rel="stylesheet" type="text/css"/>
         <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser.js"></script>
<script src="clients.json"></script>
    
    </head>
    <body>
        
           
            <div id="clients_list"></div>
            <script type="text/babel">
/ далее скрипт, что выше

А это, собственно, данные из .json
[
  {
    "general": {
      "firstName": "Masha",
      "lastName": "Ivanova",
      "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/kevinoh/128.jpg"
    },
    "job": {
      "company": "Eva",
      "title": "Seller"
    },
    "contact": {
      "email": "maxa_ivanova@gmail.com",
      "phone": "(895) 135-0678"
    },
    "address": {
      "street": "Karla Marksa, 35",
      "city": "Dnepr",
      "zCode": "48155",
      "country": "Ukraine"
    }
  },
  {
    "general": {
      "firstName": "Ira",
      "lastName": "Ivchenko",
      "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/andysolomon/128.jpg"
    },
    "job": {
      "company": "ATB",
      "title": "cahier"
    },
    "contact": {
      "email": "ira_ivchenko_95@yahoo.com",
      "phone": "375-45-15"
    },
    "address": {
      "street": "Gagarina, 48",
      "city": "Zaporozhie",
      "Code": "145-25-178",
      "country": "Ukraine"
    }
  },
  {
    "general": {
      "firstName": "Arnold",
      "lastName": "Black",
      "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/holdenweb/128.jpg"
    },
    "job": {
      "company": "Gorillaz",
      "title": "manager"
    },
    "contact": {
      "email": "arnold_bl@hotmail.com",
      "phone": "305-47-26"
    },
    "address": {
      "street": "Left-bank street",
      "city": "Grodno",
      "Code": "546-32-96",
      "country": "Belarus"
    }
  }
]

Возлагаю надежды на вашу помощь
Ответ: VasilisAngel,
1 вариант: получать json с сервера обычным XMLHttpRequest`ом
2 вариант: импортировать этот json файл в компонент, и вебпаком получить его в сборке
import Clients from './clients.json'
...
var ClientsList = React.createClass({
                render: function() {
                    return(
                      <div>
                        <ul>
                            {
                            Clients.map( function(el){
                                return <li> {el.general.firstName} </li>;
                            })
                            }
                         </ul>
                      </div>
                     );
                }
            });

и удалить этот бред из html
<script src="clients.json"></script>
Вопрос: Вывод JSON Объекта из localStorage

Вобщем надо вывести все объекты из локалстоража...Если применяю $.parseJSON(); к переменной value - выдает undefined, если нет, то выводит тупо весь JSON объект из значения строкой. Что не так?
// JavaScript Document
$(document).ready(function(){
		function isLocalStorageAvailable(){
				try {
					return 'localStorage' in window && window['localStorage'] !== null;
				} catch (e) {
					return false;
				}
			}
		try {
			//localStorage.setItem('foo', 'bar');
		} catch (e) {
			if (e == QUOTA_EXCEEDED_ERR) {
				alert('Локальное хранилище переполнено');
			}
		}
	$.getJSON(
		'json/posts.json',
		function(data){
		var posts = '';
	  	$.each(data, function(postIndex, post) {
			localStorage.setItem('post_id'+post['id'], JSON.stringify(post));
			posts += localStorage['post_id'+post['id']];
			
			//var local = $.parseJSON(posts);
			//alert(local);
		})
		var ololo = $.parseJSON(localStorage['post_id1']);
		alert(ololo.title);
		var obj = window.localStorage;
		for(var key in obj){
			value = localStorage[key];
			alert(key +'=>'+value);
		  alert('Ошибка где-то до этой строки.');
		};
		  for (var i = 0; i < localStorage.length; i++) {
		       alert(localStorage[i] + " = " + $.parseJSON(localStorage[localStorage[i]]));
			   $.each($.parseJSON(localStorage[localStorage[i]]), function(eIndex, e) {
				   alert(e.title);	
			   });
		  }
		//for(var i=1, len=localStorage.length; i<len; i++) {
		//    var value = $.parseJSON(localStorage['post_id'+i]);
		//		$.each(value, function(eIndex, e) {								
		//			alert(e.title);
		//			});
		//}
		//var local = $.parseJSON(posts);
		alert(posts);
		//posts += localStorage.setItem('posts', JSON.stringify(data))
		//var local = $.parseJSON(localStorage.getItem('posts'));
		//formatposts = $.parseJSON(posts);
		//alert(formatposts);
		//for(i=0; i<posts.length; i++){
		//	alert(posts[i]);
		//}
			$.each(posts, function(entryIndex, entry) {
					var post = '<article><header><h3>';
					post += entry['title']+'</h3></header><section><p>';
					post += entry['body']+'</p></section><footer>';
					if(entry['tags']){
						post += '<div id="tags">';
						$.each(entry['tags'], function(tagIndex, tag){
							post += '<span class="label">' + tag + '</span>'
						});
						post += '</div><div class="controls"><a class="btn btn-danger btn-mini">удалить</a></div>';
					}
					post += '</footer></article>';
					$('#posts').append(post);
       		 });
		});
		
});


Вот можете посмотреть сами
Ответ: ошибки вот здесь :

for (var i = 0; i < localStorage.length; i++) {
		       alert(localStorage[i] + " = " + $.parseJSON(localStorage[localStorage[i]]));
			   $.each($.parseJSON(localStorage[localStorage[i]]), function(eIndex, e) {
				   alert(e.title);	
			   });
		  }


ибо i - число, и localStorage[ число ] не существует, ибо сохраняли с ключом вида 'post_id'+post['id']

и итерация начинается с нуля, а ID'шники погут случайным образом попадаться, т.е. простой итерацией тут не спастись.

но, ели хотите, можно так: i + 1.

идем далее.

$.parseJSON(localStorage[localStorage[i]]

это что такое? допустим i исправили, localStorage["post_id"+(i+1)] возвратит строку объекта. далее получаем undefined из внешнего (первого слева) localStorage, и пытаемся из этого undefined взять JSON. ошибочка.

вот так пойдёт
$.parseJSON(localStorage["post_id" + (i + 1)])
Вопрос: Преобразование JSON в AJAX'е возможно только с "чистыми" php-файлами?

Добрый день. Когда совершал передачу данных по ajax (подзагрузка контента) заметил такую проблему. Полученные данные с серверного файла (в виде json) js преобразует их в объект (JSON.parse) на стороне клиента лишь в том случае, если данные, которые прислал php, получены только с файла, c отсутствующими выражениями include, require_once и т.д.

В случае с имеющимися include в серверном файле, js возвращает строку - json_encode, с которой ничего поделать нельзя.

Скажите, в порядке ли это вещей такое поведение и можно ли как-то использовать include ?
Ответ:
Сообщение от hoax
print_r($o); // array
echo 'text'; // выводит
То есть по вашему это и есть ответ в формате JSON?

Заменить var myArr = JSON.parse(xmlhttp.responseText); на

try {
    var myArr = JSON.parse(xmlhttp.responseText);
} catch (e) {
    alert(e)
}


Смотрим результат при валидном json и смеси.
Вопрос: вывод данных из массива JSON

Граждане, упарился ковырять гугл (и он от меня тоже устал). Подскажите, как выводить данные из массива?
В PHP это делается просто и понятно:
$row = $query->fetch_assoc();
<div>".$row['name']."</div>

как выводить из:
success:function(data){}


В PHP:
case 'значение': $result = функция($_POST); echo json_encode($result); break;

В jQuery:
function call(){
    var forms = $('form.add').serialize();
    var ansver = $('div.ansv');
    $.ajax({
        type:'POST',
        url:'обработчик.php',
        data:forms,
        success:function(data){
        //как работать с массивом в data?
        }
    });
}

массив ассоциативный в виде:
{"id":"11","wr":"63078","w_ph":"........","s_rou":"\u041a\u0438\u0435\u0432-\u041c\u043e\u0441\u043a\u0432\u0430","s_st":"\u041a\u0438\u0435\u0432","s_fn":"\u0421\u0435\u0432\u0430\u0441\u0442\u043e\u043f\u043e\u043b\u044c","s_nm":"\u041a\u043e\u0441\u043c\u0443\u043b\u044f \u0421\u0435\u0440\u0433\u0435\u0439","s_ph":"0979654433","s_kl":"1","s_dt":"03.03.2016","s_mn":"900","s_ps":"\u041c\u0435\u0441\u0442\u043e \u0443 \u043e\u043a\u043d\u0430"........... и т.д}

второй вариант массива:
если в PHP вместо json_encode ставлю print_r,
Array ( [id] => 11 [work] => ..... [w_ph] => .......... [s_rou] => ............. [sl_st] => ....... [s_fn] => ................. [s_nm] => ............. [s_ph] => ............. и т.д )

как значение всунуть например:
var div = $('<div/>',{
    class:'class',
    text: data.id //сюда значение из массива (не работает)
});
или
$('<div>'+data.name+'</div>'); //не работает
HELP пожалуйста...
Ответ: скрин экрана сюда реально выложить..? через alert(data); выводит тоже самое.
Вопрос: json данные, сумма чисел.

Есть такой вот скрипт

<script>
function sIncrease(i, ii) {
if(!i.online) return 1;
if(!ii.online) return -1;
var pl1 = parseInt(i.players.split('/')[0],10);
var pl2 = parseInt(ii.players.split('/')[0],10);

 if (pl1 > pl2)
 return -1;
 else if (pl1 < pl2)
 return 1;
 else
 return 0;
}

var offline = '<img src="http://image.www.gametracker.com/images/maps/160x120/nomap.jpg">';
var Data;
var AllowToRent = false;

$(document).ready(function(){
$.getJSON('http://site.ru/file.json', function(data) {
   Data = data;
   Data.sort(sIncrease);
   
   
for(var i = 0; i< Data.length ; i++)
	{
		if(typeof(Data[i]) != "undefined" )
		{

			var dataRow = Data[i];
			
		if(dataRow.online)
			{
				$( "#monitoring" ).append( "тут html код "+dataRow.players +"" );
			}
		}
	}
	

});

});

</script>

вывод в html через <div id="monitoring"></div>

В json файле есть значения "players":"5/20" допустим, их очень много.
Выводится через "+dataRow.players +"
Как получить сумму всех значений которая находится до слеша и вывести её аналогичным образом?
Так же, сейчас стоит сортировка по первому значению до слеша, чем больше, тем выше по списку оно выводит.
Ответ:
Сообщение от рони
frealy121212,
медитируйте ...
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

  <script>
     $(function(){
var data = [
{"online": true,"players":"16/24","name" : "SSS"},
{"online": false,"players":"1/20","name" : "TTT"},
{"online": true,"players":"13/13","name" : "PPP"}
];//убрать

function fn(c) {
    c = c.filter(function(a) {
        return a.online
    }).sort(function(a, b) {
        return b.players.split("/")[0] - a.players.split("/")[0]
    }).reduce(function(a, b) {
        $("#monitoring").append("Игрок " + b.name + " результат : " +b.players + "<br>"); // b.name убрать
        return a + +b.players.split("/")[0]
    }, 0);
    $("#monitoring").append("Итого : " + c)
};
fn(data);//это убрать ниже раскоментировать
/* $.getJSON('http://site.ru/file.json', fn);    */
});


  </script>
</head>

<body>
<div id="monitoring"></div>

</body>

</html>
попробую.
Вопрос: Ошибка при чтении json полученного через ajax

Здравствуйте.

Хочу сделать подгрузку json через ajax, с последующим поиском по json, по :

var json;
var xmlhttp;
var products;		

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp = new XMLHttpRequest();
}
else
{// code for IE6, IE5
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
		if (xmlhttp.readyState==4 && xmlhttp.status==200)
		{
			json = JSON.stringify(xmlhttp.responseText);

			json = JSON.parse(json);
		}
}
xmlhttp.open("GET","/app/js/lib.json",true); 
xmlhttp.send();
		
function searchPositions(arr, searchKey) 
{
return arr.filter(obj => Object.keys(obj).some(key => obj[key].includes(searchKey)));
}

products = searchPositions(json, "текст");


В итоге получаю ошибку в строке return arr.filter(obj => Object.keys(obj).some(key => obj[key].includes(searchKey))); :
main.js:270 Uncaught TypeError: arr.filter is not a function

Причем если json вставить сразу в код, примерно так, то ошибок не будет и поиск отрабатывает:

json = JSON.stringify([{"id":1,"low_name":"белый карандаш","name":"Карандаш"},{"id":2,"low_name":"синий фломастер","name":"Фломастер"},{"id":3,"low_name":"черный маркер","name":"Маркер"}]);



Как исправить эту ошибку?

Файл json , который я пытаюсь получить через ajax создается заново каждый день и встроить его в js файл нет возможности.
Ответ: действительно.
laimas и рони огромное спасибо!

Перенес код ниже в 19 строку
document.addEventListener("keyup", function(e) {

if (e.target.id == 'search_field')
{
     if(e.target.value.length > 1){
	  products = searchPositions(json, "текст");
     }
});


JSON.stringify убрал. действительно был некоректный json, добавил [ ]
Вопрос: Сериализация форм в json

Здравствуйте!

Есть метод serialize(), который собирает с формы все значения и упаковывает в строку формата x1=y1&x2=y2....

Есть ли метод наподобии serialize, который будет упаковывать в строку формата json. в таком виде:


{
"firstName": "Иван",
"lastName": "Иванов",
"address": {
"streetAddress": "Московское ш., 101, кв.101",
"city": "Ленинград",
"postalCode": 101101
},
"phoneNumbers": [
"812 123-1234",
"916 123-4567"
]
}


это случайно не serializeArray()???

но как используя этот метод сделать вложенность json в json как показано в примере

"address": {
"streetAddress": "Московское ш., 101, кв.101",
"city": "Ленинград",
"postalCode": 101101
}

тут json adress вложен в общий json/
Ответ:
Сообщение от laimas
Так вам все таки форму нужно серриализовать, а не объект имеющийся, зачем же тогда JSON.stringify.

А чтобы получилось так:

"bublik": [1,3],
"bublik2":2

нужно колдовать не с html структурой формы, а соответственно именовать ее поля. Одно и тоже имя нельзя задавать полям, иначе сервер получит значение последнего из этих полей (массив не может иметь дубликаты ключей).
<form action="json.txt">
            <input type="text" name="bublik[]" value="1">
            <input type="text" name="bublik2" value="2">
            <input type="text" name="bublik[]" value="3">
        </form>

Это все что нужно сделать.
из вашего примера не выходит такой вид:


"bublik": [1,3],
"bublik2":2


вот что получается:

[{"name":"bublik[]","value":"1"},{"name":"bublik2","value":"2"},{"na me":"bublik[]","value":"3"}]


<head lang="en">
        <meta charset="UTF-8">
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <title></title>
    </head>
    <body>


        <form action="json.txt">
            <input type="text" name="bublik[]" value="1">
            <input type="text" name="bublik2" value="2">
            <input type="text" name="bublik[]" value="3">
        </form>
        <button type="submit" class="a_submit">Submit</button>
        <div class="wrapper"></div>
        <script>
            $('.a_submit').on('click', function (form) {
                form.preventDefault();
                $('.wrapper').html(JSON.stringify($(this).prev('form').serializeArray()));
            });
        </script>
    </body>