PDA

Просмотр полной версии : AS3 + json и php


alanq
20.10.2015, 16:01
Всем доброго. Перейду сразу к делу. Есть 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.

Сколько не шерстил инет не могу понят как исправить. Подскажите как сделать куда смотреть?

illuzor
20.10.2015, 16:17
Что трейс показывает?

alanq
20.10.2015, 17:13
{"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"}

alanq
20.10.2015, 17:52
Т.е. ошибка в php $objJSON = array($ulvl => $uscount); Если да, то не пойму как тут поставить то ','

illuzor
20.10.2015, 17:52
alexandrratush, почти.
Правильно будет так:
[{"1":"1"},{"2":"2"},{"3":"3"}]

alanq
20.10.2015, 17:57
как это реализовать?

alexandrratush
20.10.2015, 18:41
Может быть ошибка в том, что вы в первой итерации цикла while возвращаете значение в флешку?
Как то странно это выглядит.

alanq
20.10.2015, 18:43
сделал вот так 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
Сначала нужно перебрать все элементы из запроса, сложить в массив, потом закодировать и отправить.

alanq
20.10.2015, 18:52
пропустил [] )) добавил $objJSON[] = array($ulvl => $uscount); все заработало.
естественно в as3 в трейс выводит [object Object] возможно ли это как то преобразовать, что бы я видел через трейс данные которые там содержатся? в частности trace(arrayReceived[0]); вывод типа 1 : 1

alexandrratush
20.10.2015, 18:54
trace(JSON.stringify(event.target.data));

alanq
20.10.2015, 19:04
так trace(JSON.stringify(event.target.data)); выводит все, а как работать с ним дальше? например я хочу вывести первый элемент trace(arrayReceived[0]); но он выводит не 1 1, а [object Object]

illuzor
20.10.2015, 19:42
trace(arrayReceived[0]["1"]);
Почитайте справку, что ли.

alanq
20.10.2015, 20:24
изменил в 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.

alanq
20.10.2015, 23:16
как и должно быть выводит 1 1

GBee
20.10.2015, 23:54
А что вам неудобно?

alanq
21.10.2015, 09:40
та нет, все удобно. Просто интересует сама конструкция кода правильная или бред? Хоть и работает, но мало ли может есть более лучший вариант.

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);

alanq
22.10.2015, 11:16
Логика верная, но можно улучшить читаемость. Положите, например, в переменные.
var arrayReceived:Object = JSON.parse(event.target.data);
var firstItem:Object = arrayReceived[0];
trace(firstItem.lvl + firstItem.scount);

Спасибо огромное. так будет удобней)