2013-06-09 3 views
-1

Я пытаюсь вернуть данные из базы данных и преобразовать их в json и отправить их обратно на мой javascript. Однако он не работает так, как планировалось, он возвращается как массив на javascript.Возврат JSON не работает должным образом

Javascript

function getData(id) { 
    $.ajax({ 
     url: 'some url', 
     crossDomain: true, 
     type: 'post', 
     data: { 
      id: id 
     }, 
     success: function (data) { 
      var json = jQuery.parseJSON(data); 
      alert(data); 
     }, 
    }); 
}; 

PHP

<?php 
header("access-control-allow-origin: *"); 

$dbhost = 'you dont need this info'; 
$dbuser = 'you dont need this info'; 
$dbpass = 'you dont need this info'; 
$db  = 'you dont need this info'; 

$dbserver = mysql_connect($dbhost, $dbuser, $dbpass) or die("Unable to connect to MySQL: " . mysql_error()); 
mysql_select_db($db) or die("Unable to select database: " . mysql_error()); 

if (isset($_POST['id'])) { 
    $ID = $_POST['id']; 
} 
echo $ID; 

$result = mysql_query('SELECT * FROM clubmember WHERE clubID = "' . $ID . '"'); 
$row = mysql_fetch_assoc($result); 
$name = $row['name']; 
$clubID = $row['clubID']; 
$lID = $row['lID']; 
$sName = $row['sName']; 
$desc = $row['description']; 


$json = json_encode(array(
    'name' => $name, 
    'clubID' => $clubID, 
    'lID' => $lID, 
    'sName' => $sName, 
    'description' => $desc 
)); 

echo $json; 

?> 

В JavaScript оповещения в виде [object Object], [object Object] ... который не должен быть случай ...

+4

Вашего кода уязвит для инъекций тузды – Fabio

+0

что? я не помещал пароли в свой db – nshah

+3

Почему вы эхом отзываете $ id, который, вероятно, вызывает некоторые проблемы? – KyleK

ответ

1

Дон» t echo $ ID в вашем PHP. Используйте свойство ajax dataType jQuery и установите его в json. Использовать json-парсер javascript по умолчанию.

1

попытаться предупредить json, а не data?

+0

предупреждение json дает мне [объект Object] .. – nshah

+0

вместо предупреждения попробуйте '' console.log (json) '' и посмотрим, если он отображается как массив в консоли. или попробуйте '' alert (json.name) '' – mahdilamb

+0

json.name возвращает undefined ?? wut – nshah

1

Javascript возвращает объект, потому что вы на самом деле предупреждаете объект. Попробуйте alert(data.name);

или alert(data.clubID);, он будет работать.

+0

но мои данные, которые возвращаются, находятся в другом формате, чем то, что я выбрал в php. – nshah

+0

. Вы возвращаете ассоциативный массив из PHP, например. array ('name' => x, 'age' => y); который javascript видит как объект (потому что он один), даже если вы json_encoded его – Comforse

+0

, но массив должен быть как 5 значений long, он содержит только id и имя – nshah

1

Необходимо указать тип данных, который запрашивает запрос ajax, иначе jQuery будет «интеллектуально» обнаруживать на основе типа MIME. Если вызов ajax получает данные json, он будет использовать его как объект JavaScript, поэтому вы получаете это предупреждение.

1

Вызов .ajax() будет, если параметр dataType не указан, «разумно угадать», что возвращает запрошенная страница.
В случае JSON он передаст объект JavaScript в функцию успеха.

Рассмотрев ваши вопросы, я считаю, что понимаю, что вы имеете в виду. То, что вы ожидаете, - это один объект (поиск с использованием SQL, как было сказано очень небезопасно) с 5 свойствами, именем, clubID, lID, sName и описанием. Однако, похоже, что вы возвращаетесь, это несколько строк с двумя свойствами?
Что вы говорите, так это то, что в то время как php script echo имеет правильные значения (одна строка), но JSON получает несколько значений (/ rows).
Вы уверены, что PHP получает правильный ID от вызова AJAX?

1

Это правильно.

JSON - это объект. a.k.a Обозначение объекта Javascript. Это должно быть на случай. Он должен содержать ваши данные. Попробуйте data.*.

Кстати, если вы не очистите данные, поступающие от ваших пользователей, прежде чем использовать их с любым SQL-запросом, это вызовет проблемы.

в действии с базовым примером:

// $_POST['id'] = '" OR 1"' 
$result = mysql_query('SELECT * FROM clubmember WHERE clubID = "'.$ID.'"'); 

Ваш запрос теперь

SELECT * FROM clubmember WHERE clubID ="" OR 1 "" 

Поскольку 1 всегда верно, я теперь в состоянии принять все ваши clubmember таблицы. Приветствия.

+0

, как я могу его очистить? – nshah

+0

Начать использовать mysqli при подключении к базе данных. Он имеет (и mysql) строку mysqli :: real_escape_string (строка $ escapestr). http://www.php.net/manual/en/mysqli.real-escape-string.php –

1

Даже если parseJSON возвращает объект, делая console.log должен показать [Object, Object, ...], который является массивом объектов

+0

да, но это должен быть 1 массив из 5 объектов, но его несколько массивов по 2 объекта по какой-то причине – nshah

+0

@nshah У вас есть 2 эха, что неправильно. Попробуйте сначала исправить это и посмотреть, что произойдет. И нет, вы не должны использовать alert() для отладки переменной, попробуйте console.log. При использовании alert() браузер имеет тенденцию преобразовывать массив в строку, разделенную запятой –

+0

. Я удалил одно эхо все, что у меня есть echo $ json; – nshah

Смежные вопросы