[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Массивы - в качестве параметров для передачи
zvezda_t
Здравствуйте, уважаемые программисты :)

Я хочу из 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

Спустя 1 минута, 21 секунда (17.03.2011 - 13:58) zvezda_t написал(а):
Цитата
смотри в сторону json

выше я показала, как использовала json. А как там массивы применить?

Спустя 3 минуты, 46 секунд (17.03.2011 - 14:01) Oyeme написал(а):
Лучше тебе это делать с помощью jquery,это проще и удобней
С помощью 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
Ссыль smile.gif

Спустя 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
Я же тебе ссылочку прислал rolleyes.gif

Спустя 10 минут, 8 секунд (17.03.2011 - 14:29) zvezda_t написал(а):
ммм... поняла)

так же

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.

Спустя 4 минуты, 13 секунд (17.03.2011 - 16:06) Michael написал(а):
А если на php такой массив выведешь:
$a = array('aa','bb');
echo json_encode($a);

то получишь в html-e:
["aa","bb"]

не объект, а массив(со свойством length)


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.