2012-04-10 2 views
1

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

Вот мой JS:

$.post('php/get_last_word.php', { user_id : userID }, 
     function(data) { 
      currentLanguage = data.language_id; 
      currentWord = data.word_id; 
      console.log("currentLanguage = " + currentLanguage) 
      console.log("currentWord = " + currentWord);   
    },'json'); 

И отношение PHP:

$user_id=$_POST['user_id']; 

mysql_select_db(wordsicle_search); 

$sql = "SELECT `language_id`, `word_id` FROM `save_state` WHERE `user_id`=$user_id"; 
$result = mysql_query($sql,$con); 

while ($row = mysql_fetch_assoc($result)) { 
    $encoded = json_encode($row); 
    echo $encoded; 
} 

И полученный лог:

Connected successfully{"language_id":"1","word_id":"1"} 

Так массив JSON идет эхом, но это не так заканчивается в data, потому что currentLanguage и currentWord не являются popu веден. Это проблема с асинхронностью? Или что-то другое?

+0

Почему это в цикле 'while'? Вы ожидаете более одного результата? Если это так, это ваша проблема; иначе просто сделайте это 'if'. Тогда есть факт, что они называются 'language_id' и' word_id', а не 'language' и' word' ... – Ryan

+0

цикл while - это php – kinakuta

ответ

3

Убедитесь, что действительный JSON возвращается к переменной из вашего PHP скрипт

Если ваш объект JSON, как это,

{"language_id":"1","word_id":"1"} 

Вы можете получить доступ к значениям, как это

currentLanguage = data.language_id; 
currentWord = data.word_id; 

Пример JsFiddle http://jsfiddle.net/NuS7Z/8/

Y ou может использовать http://jsonlint.com/, чтобы проверить, что ваш jSon в правильной форме или нет.

Задание json в качестве значения типа данных в вашем почтовом запросе будет гарантировать, что ответ возвращается как формат json для успешного обратного вызова.

$.post('php/get_last_word.php',{user_id:userID}, dataType:"json",function(data){ 
     currentLanguage = data.language_id; 
     currentWord = data.word_id; 
}); 

Вы также можете использовать getJson просто получить данные JSON. getJson является сокращенным Аякса вызова с типом данных, как JSON

http://api.jquery.com/jQuery.getJSON/

+0

Спасибо, я пропустил это. Тем не менее, он все еще ничего не возвращает с этим исправлением. – Ramsel

+0

@SmoothAlmonds: см. Мой обновленный ответ на примере ссылки. Я думаю, ваш jSon недействителен. Вам не нужно, чтобы «успешно завершил» в вашем jSon. – Shyju

+0

Исправлено. Это была глупая ошибка. У меня было «echo» Connected успешно »; в файле php после подключения и перед возвратом данных, чтобы он возвращался первым. Благодарю. – Ramsel

0

Попробуйте изменить JS для:

$.getJSON('php/get_last_word.php', { user_id : userID }, 
     function(response) { 
      if (response.success) { 
       currentLanguage = response.data.language_id; 
       currentWord = response.data.word_id; 
       console.log("currentLanguage = " + currentLanguage) 
       console.log("currentWord = " + currentWord);  
      } else { 
       alert('Fail'); 
      } 
    }); 

и ваш PHP для:

<?php 
$success = false; 
$data = null; 
$user_id=$_POST['user_id']; 

mysql_select_db(wordsicle_search); 

$sql = "SELECT `language_id`, `word_id` FROM `save_state` WHERE `user_id`=$user_id"; 
$result = mysql_query($sql,$con); 

while ($row = mysql_fetch_assoc($result)) { 
    $success = true; 
    $data = $row; 
} 

// I generally format my JSON output array like so: 

// Response 
header('Content-Type: application/json'); 
echo json_encode(array(
    'success' => $success, 
    'data' => $data 
)); 

?> 

Таким образом, его более организованным и не забудьте установить тип содержимого.

Надеюсь, что это поможет.

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