2015-08-10 6 views
0

Так что я хочу отправить json на вызов ajax, но я не знаю, как читать json при его отправке. А также мой JSON выглядит странно из-за обратной косой черты ...Ajax прочитал PHP сгенерированный json

Это мой Аякса:

function find(){ 
     var type = $('#object_type').val(); 
      $.ajax({ 
       type : 'POST', 
       url : 'get_user.php', 
       data : { 
        'type' : type 
       }, 
       dataType : 'json', 
       error : function(response){ 
        alert('SOMETHING WENT WRONG'); 
       }, 
       success : function(response){ 

This is what I get as a response: 
"[{\"name\":\"Test\",\"link\":\"test.php\"},{\"name\":\"Test2\",\"link\":\"test2 
.php\"}]" 
       } 
      });  
    } 

Это мой PHP функция:

$type = $_POST['type']; 
    $user_array; 
    $user = mysqli_query($conn, "SELECT name,link FROM user WHERE `type` LIKE '%".$type."%'") or die(); 

      while ($row = mysqli_fetch_array($user, MYSQLI_ASSOC)) { 

       $row_array['name'] = $row['name']; 
       $row_array['link'] = $row['link']; 
       array_push($user_array, $row_array); 
      } 
     mysqli_close($conn); 
     $result = json_encode($user_array, 128); 
     echo json_encode($result); 
+0

Ответ, вероятно, действителен. Но делается таким образом. Если вы посмотрите на свой инструмент разработчика (F12) в своем браузере, вы можете увидеть фактический текст ответа на вкладке сети. – Mouser

+0

Mah, я не знаю, действительно ли это, я читал, что эта обратная косая черта может вызвать проблемы .. и в любом случае я не знаю, как получить доступ к данным внутри json .. – DJack

+0

Попробуйте сделать это в своей функции успеха, чтобы увидеть, works: 'alert (ответ [0].name) ' – Mouser

ответ

4

Первое изменение, которое вы должны make: Вам не нужно кодировать два раза

$result = json_encode($user_array, 128); 
echo json_encode($result); 

должен быть

$result = json_encode($user_array, 128); 
echo $result; 

Теперь ответ должен выглядеть

[{"name":"Test","link":"test.php"},{"name":"Test2","link":"test2 
.php"}] 

который является допустимым Javascript массива и можно получить с помощью следующего кода:

var len = response.length; 
for(i=0;i<len;i++){ 

    console.log(response[i].name); 
    console.log(response[i].link); 

} 
4

Как предусмотрено в techierishi «ю.ш. ответ. Не кодируйте свой ответ дважды. Просто сделайте

echo $result; 

JSON должен быть действительным и разобранным, почему?

  • json_encode используется для допустимого массива PHP, возвращаемого из запроса MySQLi.
  • dataType используется, явно заставляя jQuery JSON.parse отклика и ошибок, возникающих во время этого процесса.

JSON, который возвращается имеет следующую структуру

ROOT 
    ARRAY 
     ARRAY OBJECT 
      OBJECT PROPERTY 

Для решения что-то вроде этого:

root[array index].property 

даст вам ценность массива, который является объектом. Этот объект имеет несколько свойств.

[] означает массив
{} средства объекта

Так [{name:"value 1"},{name:"value 2"}] фактически

ARRAY 
    [0].name = value 1 
    [1].name = value 2 

Так получение информации, как имя из JSON будет:

response[0].name; // = test 
+0

Если я делаю var name = response [0] .name; а затем alert (name), я получаю Undefined – DJack

+0

См. ответ Techierishi и соответствующее изменение, которое я сделал для моего ответа. – Mouser

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