Я хочу из php в качестве возвращаемого значения в функцию ajax передать массив.
Скажите пожалуйста, возможно ли это?
Вот что имею:
print "<input type='hidden' name='t1_stb' id='t1_stb' value='9'>";
print "<script type='text/javascript' language='javascript' src='http://". $_SERVER['HTTP_HOST'] ."/ajax/ajax.js' ></script>";
ajax.js:
var d = document;
var req = Create();
fnMy1();
function fnMy1()
{ //alert('tutachki');
var a = document.getElementById('t1_stb').value;
if(a!=null)
{
query = "id="+a;
Request_fs(query);
}
}
function Create(){
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req= new XMLHttpRequest();
}
return req;
}
function Request(query)
{
req.open('post', '/ajax/selects.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);
}
function Refresh()
{
var a,b;
a = req.readyState;
if( a == 4 )
{
b = req.responseText;
//ЗДЕСЬ ХОЧУ МАССИВ ПОЛУЧИТЬ
alert('b='+b);
}
}
selects.php:
header("Content-Type: text/html; charset=utf-8");
define( '_JEXEC', 1 );
require_once("db/connect.php");
function fn_My2($m)
{
$result=mssql_query("SELECT ... ");
while($row=mssql_fetch_array($result))
{
$i=$row['id'];
$sum=$row['sum'];
//общая сумма
if(!empty($m_sum[$i])) $m_sum[$i]+=$sum;
else $m_sum[$i]=$sum;
}
//КАК В str ПЕРЕДАТЬ МАССИВ $m_sum?
//ПРИЧЕМ НУМЕРАЦИЯ МАССИВА ТАКЖЕ ВАЖНА
$str=?
return $str;
}
if(!empty($_POST["id"]))
{
$m=$_POST["id"];
echo fn_My2($m);
}
Спустя 14 минут, 24 секунды (17.03.2011 - 13:55) zvezda_t написал(а):
сделала так:
правильно? или всё таки можно массивом?
...
$str_sum=implode(" ",$m_sum);
$str_id=implode(" ",array_keys($m_sum));
//формат JSON
$value_json="{\"id\":\"". $str_id ."\", \"sum\": \"". $str_sum ."\"}";
$str=$value_json;
return $str;
function Refresh()
{
var a,b;
var IDArray,SumArray;
var data;
a = req.readyState;
if( a == 4 )
{
b = req.responseText;
data= eval("(" + b + ")");//eval() преобразует строку в формате JSON в объекты JavaScript.
IDArray=data.id.split(" ");
SumArray=data.sum.split(" ");
for(var i = 0; i < IDArray.length; i++)
{
d.getElementById('sum'+IDArray[i]).innerHTML=SumArray[i];
}
//alert('b='+b);
}
}
правильно? или всё таки можно массивом?
Спустя 1 минута, 38 секунд (17.03.2011 - 13:56) Snus написал(а):
zvezda_t
смотри в сторону json
смотри в сторону json
Спустя 1 минута, 21 секунда (17.03.2011 - 13:58) zvezda_t написал(а):
Цитата |
смотри в сторону json |
выше я показала, как использовала json. А как там массивы применить?
Спустя 3 минуты, 46 секунд (17.03.2011 - 14:01) Oyeme написал(а):
Лучше тебе это делать с помощью jquery,это проще и удобней
С помощью json.
Перед отправлением массив мы конвертирум его в json формат
вот тут вот получаем:
С помощью json.
Перед отправлением массив мы конвертирум его в json формат
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
вот тут вот получаем:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Спустя 26 секунд (17.03.2011 - 14:02) Snus написал(а):
zvezda_t
Ссыль
Ссыль

Спустя 15 минут, 48 секунд (17.03.2011 - 14:18) zvezda_t написал(а):
$str_sum=implode(" ",$m_sum);
$str_id=implode(" ",array_keys($m_sum));
//формат JSON
$value_json="{\"id\":\"". $str_id ."\", \"sum\": \"". $str_sum ."\"}";
$str=$value_json;
return $str;
заменила на
$value_json=json_encode($m_sum);
$str=$value_json;
return $str;
А как мне массив получить в Javascript что то не соображу...
function Refresh()
{
var a,b;
a = req.readyState;
if( a == 4 )
{
b = req.responseText;
//ЗДЕСЬ ХОЧУ МАССИВ ПОЛУЧИТЬ
alert('b='+b);
}
}
получилось что:
b={"1":257,"7":12015,"9":118,"2":337,"4":19970,"5":555,"6":483,"8":8865,"10":11120,"11":124,"14":150}
Спустя 1 минута, 39 секунд (17.03.2011 - 14:19) Snus написал(а):
zvezda_t
Я же тебе ссылочку прислал
Я же тебе ссылочку прислал

Спустя 10 минут, 8 секунд (17.03.2011 - 14:29) zvezda_t написал(а):
ммм... поняла)
так же
и к data можно обращаться как к массиву))))
так же
b = req.responseText;
data= eval("(" + b + ")");//eval() преобразует строку в формате JSON в объекты JavaScript.
и к data можно обращаться как к массиву))))
Спустя 7 минут, 11 секунд (17.03.2011 - 14:36) zvezda_t написал(а):
а в javascript есть аналог функции foreach? как мне перебрать все элементы массива data и получить ключи массива?
Спустя 6 минут, 13 секунд (17.03.2011 - 14:43) Snus написал(а):
zvezda_t
Вроде так, но могу ошибаться :)
Вроде так, но могу ошибаться :)
for(var key in data){
alert(key + ' => ' + data[key]);
}
Спустя 50 секунд (17.03.2011 - 14:44) zvezda_t написал(а):
так?
for(var i in data) {
if (!data.hasOwnProperty(i)) continue;
d.getElementById('sum'+i).innerHTML=data[i];
}
Спустя 44 минуты, 20 секунд (17.03.2011 - 15:28) zvezda_t написал(а):
Если я к массиву применила функцию json_encode, как мне обратно массив получить?
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
$arr= json_encode($arr);
Спустя 6 минут, 36 секунд (17.03.2011 - 15:34) Oyeme написал(а):
json_decode($arr);
Спустя 4 минуты, 23 секунды (17.03.2011 - 15:39) zvezda_t написал(а):
Oyeme, спасибо!!!
Спустя 13 минут, 43 секунды (17.03.2011 - 15:53) zvezda_t написал(а):
а вообще что правильнее использовать eval() или split?
//$m_i-массив
//список Id
$id_str=implode(" ",$m_i);
//список Id в формате json
$id_json=json_encode($m_i);
print " <input type='hidden' id='hid' name='hid' value='".$id_str."' />
<input type='hidden' id='hid_j' name='hid_j' value='".$id_json."' />";
//1 вариант
var a = d.getElementById('hid').value;
IDArray=a.split(" ");
for(var i = 0; i < IDArray.length; i++)
{
d.getElementById('sum'+IDArray[i]).innerHTML=IDArray[i];
}
//2 вариант
var a = d.getElementById('hid_j').value;
IDArray=eval("(" + a + ")");//eval() преобразует строку в формате JSON в объекты JavaScript.
for(var i = 0; i < IDArray.length; i++)
{
ds.getElementById('sum'+IDArray[i]).innerHTML=IDArray[i];
}
Спустя 9 минут, 35 секунд (17.03.2011 - 16:02) Michael написал(а):
Работая с json правильно использовать eval(или аналоги).
Только в этом случае(у тебя) IDArray будет не массив(у него не будет св-ва length) а будет объектом, и перебирать как его - выше показывали - for in.
Только в этом случае(у тебя) IDArray будет не массив(у него не будет св-ва length) а будет объектом, и перебирать как его - выше показывали - for in.
Спустя 4 минуты, 13 секунд (17.03.2011 - 16:06) Michael написал(а):
А если на php такой массив выведешь:
то получишь в html-e:
не объект, а массив(со свойством length)
$a = array('aa','bb');
echo json_encode($a);
то получишь в html-e:
["aa","bb"]
не объект, а массив(со свойством length)
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)