Просмотр полной версии : AS3 + json и php
Всем доброго. Перейду сразу к делу. Есть php
...
while ($data = mysql_fetch_array($query))
{
$ulvl= $data["lvl"];
$uscount= $data["scount"];
$objJSON = array($ulvl => $uscount);
header('Content-Type: application/json');
echo json_encode($objJSON);
}
...
и собственно код as3
phpVars = new URLVariables;
phpFileRequest = new URLRequest("http://blabla.bla/bla.php");
phpFileRequest.method = URLRequestMethod.POST;
phpFileRequest.data = phpVars;
phpLoader = new URLLoader();
phpLoader.addEventListener(Event.COMPLETE, showDataCount);
phpVars.id = _uid;
phpLoader.load(phpFileRequest);
...
public function showDataCount(event:Event):void
{
trace(event.target.data);
var arrayRes:Object = JSON.parse(event.target.data);
}
все это дело естественно выдает ошибку Error #1132: Invalid JSON parse input.
Сколько не шерстил инет не могу понят как исправить. Подскажите как сделать куда смотреть?
{"1":"1"}{"2":"2"}{"3":"3"}
[Fault] exception, information=SyntaxError: Error #1132: Invalid JSON parse input.
alexandrratush
20.10.2015, 17:36
alanq, у вас невалидный JSON.
Добавлено через 1 минуту
Если не ошибаюсь, то вот так будет правильно:
{"1":"1"},{"2":"2"},{"3":"3"}
Т.е. ошибка в php $objJSON = array($ulvl => $uscount); Если да, то не пойму как тут поставить то ','
alexandrratush, почти.
Правильно будет так:
[{"1":"1"},{"2":"2"},{"3":"3"}]
alexandrratush
20.10.2015, 18:41
Может быть ошибка в том, что вы в первой итерации цикла while возвращаете значение в флешку?
Как то странно это выглядит.
сделал вот так while ($data = mysql_fetch_array($query))
{
$ulvl= $data["lvl"];
$uscount= $data["scount"];
$objJSON = array($ulvl => $uscount);
}
echo json_encode($objJSON);
возвращает только последний элемент ((
alexandrratush
20.10.2015, 18:44
Сначала нужно перебрать все элементы из запроса, сложить в массив, потом закодировать и отправить.
пропустил [] )) добавил $objJSON[] = array($ulvl => $uscount); все заработало.
естественно в as3 в трейс выводит [object Object] возможно ли это как то преобразовать, что бы я видел через трейс данные которые там содержатся? в частности trace(arrayReceived[0]); вывод типа 1 : 1
alexandrratush
20.10.2015, 18:54
trace(JSON.stringify(event.target.data));
так trace(JSON.stringify(event.target.data)); выводит все, а как работать с ним дальше? например я хочу вывести первый элемент trace(arrayReceived[0]); но он выводит не 1 1, а [object Object]
trace(arrayReceived[0]["1"]);
Почитайте справку, что ли.
изменил в php $objJSON[] = array('lvl' => $ulvl, 'scount' => $uscount);
а в as3 var arrayReceived:Object = JSON.parse(event.target.data);
trace(arrayReceived[0].lvl + arrayReceived[0].scount);
все работает, но вопрос. Так правильно или есть более удобный способ?
alexandrratush
20.10.2015, 22:39
все работает, но вопрос. Так правильно или есть более удобный способ?
Смотря какую задачу вы пытаетесь решить. Покажите что выводит trace.
как и должно быть выводит 1 1
та нет, все удобно. Просто интересует сама конструкция кода правильная или бред? Хоть и работает, но мало ли может есть более лучший вариант.
Psycho Tiger
22.10.2015, 11:03
Логика верная, но можно улучшить читаемость. Положите, например, в переменные.
var arrayReceived:Object = JSON.parse(event.target.data);
var firstItem:Object = arrayReceived[0];
trace(firstItem.lvl + firstItem.scount);
Логика верная, но можно улучшить читаемость. Положите, например, в переменные.
var arrayReceived:Object = JSON.parse(event.target.data);
var firstItem:Object = arrayReceived[0];
trace(firstItem.lvl + firstItem.scount);
Спасибо огромное. так будет удобней)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.