2012-03-13 2 views
0

У меня проблема с моими массивами в JavaScript. Кажется, я не могу правильно оценить значение.Обработка значения массива в JS

Я создаю мой массив в PHP, как это:

$data = Array();   
$get = mysql_query("SELECT x,y,sid FROM table WHERE uid='1'"); 
    while($row = mysql_fetch_assoc($get)){ 
     $data[$row['x']] = Array(); 
     $data[$row['x']][$row['y']] = $row['sid']; 
     } 
$data = json_encode($row) 

EDIT json_encode выходит как "ложный"/EDIT

Затем я назначил это $ данные переменной JS как SData.

Итак, я пытаюсь получить значение в JS, но его не работает. Я получаю неопределенную ошибку.

Это мой Javascript:

var i = 1; 
var j = 5; 
    if(sdata["x"] == i && sdata["y"] == j){ 
    alert(sdata["x"]["y"]["sid"]); 
      } 

Его означало, чтобы предупредить меня значение «Sid», но я получаю: Неопределенные

Любые идеи, где моя ошибка есть?

+0

вы должны использовать sdata.x, sdata.y и sdata.sid и не SDATA [х] и т.д. Пожалуйста, прочитайте мой ответ ниже и, пожалуйста, дайте мне знаю, работает ли это для вас – dAm2K

ответ

2

Учитывая Ваш JSON

alert(sdata["x"]["y"]["sid"]); 

должен быть

alert(sdata["sid"]); 

как JSon кодированные данные вы показываете лишь один одномерный массив

EDIT

Если JSON выходит как ложный, это совсем другая история:

$data = json_encode($row); 

Должен быть внутри цикл, для хорошей практики, и если вы только кодирующими $ строки, почему даже заморачиваться с

$data[$row['x']] = Array(); 
    $data[$row['x']][$row['y']] = $row['sid']; 

В противном случае попробуйте

print_r($row); 

в ваше время и убедитесь, что ваш ожидаемый результат проходит через mysql.

EDIT

Если вы пытаетесь получить переменную $ данных в формате JSON затем использовать

$data = json_encode($data); 

за пределами вашего цикла.

EDIT

JSFiddle вернуть SID для заданных х и у - я уверен, что это может быть сделано более чистым способом, но это начало http://jsfiddle.net/HWByj/

var sdata = {"4":{"4":"1"},"7":{"1":"0"}}; 
var i = 4; 
var j = 4; 

if(typeof sdata[i] != 'undefined') 
{ 
    if(typeof sdata[i][j] != 'undefined') 
    { 
     alert(sdata[i][j]); //gives you the value of sid 
    } 
} 
     ​ 
+0

Но может быть много строк данных, поэтому его цикл в то время как раз так происходит в этой ситуации. У меня была одна строка данных, но может быть множество – Sir

+0

См. мое последнее изменение - json_encode does not поддержка многомерных массивов –

+1

@ErikKettenburg 'json_encode' отлично работает с многомерными массивами. С чего взял? – Crashspeeder

2

В вашем примере , вам нужно всего лишь:

alert(sdata["sid"]); 
1

Он смотрит на меня, как ваша проблема здесь:

$data = json_encode($row) 

Я думаю, что вы хотите:

$data = json_encode($data); 

Вы пробегаем по строкам и ввод данных в $ данных, но тогда вы кодирующая переменную $ строки. Вы также используете эту переменную $ row для исключения из цикла while, поэтому строка $, вероятно, имеет значение null, когда вы ее кодируете. Вот почему он выходит как ложный.

1

Если ваш json_encode() возвращается false, тогда убедитесь, что вы возвращаете данные из запроса. Кроме того, вы ничего не делаете с $data, вы делаете json_encode() на $row, что даст вам другую структуру, чем я полагаю, вы ожидаете.

0

Вы должны использовать sdata.x, sdata.y и sdata.sid, поскольку возвращенный json не является ассоциативным массивом, но это объект.

Попробуйте с этой частью JS кода:

function myobjtool(myobj, i, j) { 
     // alert("myobj: " + myobj.x); 
     if(myobj.x == i && myobj.y == j) { 
       alert(myobj.sid); 
     } 
} 

myobj = {"x":"4","y":"4","sid":"1"} 
myobjtool(myobj, 4, 4) 
Смежные вопросы