2013-05-25 1 views
0

Прошу прощения, если кто-то знает о доступном ответе на мой вопрос, однако после недели поиска в Интернете и пробных материалов я думал, что попрошу экспертов.Передача информации о базе данных с php на javascript - mysql_fetch_array не действует, как ожидалось

Цель: запроса база данных SQL с помощью кода на стороне сервера (в этом случае PHP), а затем передать эту информацию из базы данных в JavaScript на веб-странице, чтобы кнопки генерироваться динамически. Обратите внимание, что из возвращенной базы данных будет несколько строк. Как только кнопки сгенерированы, они вызовут php-код для изменения значений в базе данных, однако это первая часть, с которой я сейчас борюсь.

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

Обзор: PHP отправляет запрос mysql через mysql_query для получения информации из базы данных. Затем AJAX используется с json_encode для кодирования информации в php, а затем эхо используется для вывода ответа на javascript.

код PHP:

<?php //start php code 
include 'DatabasePhp/openDatabase.php'; //includes my mysql_connect code to connect to the database. Works. 
$query = 'SELECT `users`.`user_name`, `users`.`user_id`, `users`.`join_date`' 
. ' FROM users' 
. ' LIMIT 0, 30 '; 
$result= mysql_query($query); 
include 'DatabasePhp/closeDatabase.php'; 
$aa = mysql_fetch_array($result, MYSQL_ASSOC); 
$total_array[0] = $aa; 
$total_array[1] = array('user_name' => 'bb','day' => '5'); 
$formatted_variable_pass = json_encode($total_array); 
echo $formatted_variable_pass; 
?> 

PHP Примечания: Я буду использовать петлю, пока однажды я исправить эту проблему, чтобы запустить через каждую строку из моих результатов базы данных и добавить их в $ total_array. В настоящее время это настройка только для двух индексов массива, чтобы выделить мою проблему. $ total_array [0] хранит ответ из запроса mysql, $ total_array [1] - я генерирую ассоциативный массив (например, я думал, что получаю от mysql_fetch_array).

код Javascript:

<script type="text/javascript" language="JavaScript"> 
document.write("Well your starting javascript"); 
var btn_num = 0; 

if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

xmlhttp.onreadystatechange=function() // the function called when a result is returned from the php 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
var responce_json = JSON.parse(xmlhttp.responseText); 
    document.getElementById("txtHint").innerHTML="got responce "+responce_json[0]['user_name']+" "+responce_json[1]['user_name']; 
}else if(xmlhttp.status==404){ 
    document.getElementById("txtHint").innerHTML="Not found"; 
}else if(xmlhttp.readyState==0){ 
    document.getElementById("txtHint").innerHTML="Responce was 0"; 
}else{ 
    document.getElementById("txtHint").innerHTML="Not completed the responce"; 
} 
} 
xmlhttp.open("POST","DatabasePhp/getUsers.php",true); 
xmlhttp.setRequestHeader("Content-type","application/json;charset=UTF-8"); 
xmlhttp.send(null); 

document.write("and the results are .... "); 

</script> 

Javascript отмечает: код в основном создает класс типа XMLHttpRequest, основанный на браузере в использовании, а затем отправляет запрос POST через xmlHttp.open. Ответ обрабатывается через xmlhttp.onreadystatechange = function(), то есть ответ записывается только после подтверждения ответа, то есть когда xmlhttp.readyState == 4 & & xmlhttp.status == 200.

Проблема: У меня возникли проблемы с передачей данных mysql_fetch_array в javascript. Причина, по которой я помещал ассоциативный массив php в $ total_array [1], состоит в том, что я хотел доказать, что могу передавать переменные. Код успешно передает этот массив в другом массиве, и я могу получить доступ в javascript через responce_json [1] ['user_name']. К сожалению, независимо от того, как я пытаюсь получить ассоциативный массив, возвращаемый из mysql_fetch_array (который установлен для возврата ассоциативного массива), в текущем коде, выполненном responce_json [0] ['user_name'], я не получаю ответа. Во время моих испытаний у меня было соединение «null», возвращаемое, когда я пытаюсь получить ассоциативный массив aa в [0], и, как правило, мой код не заполняет код, когда я пытаюсь получить доступ к ['user_name'] mysql возвратил ассоциативный массив.

Так что вопрос: Могу ли я что-то отсутствует об ассоциативном массиве, который возвращается в mysql_fetch_array (набор для возвращения ассоциативный массив с помощью MYSQL_ASSOC), он не отвечает, как созданный вручную ассоциативный массив (один раз в JavaScript - работает правильно в php), и я не могу понять, почему. Кто-нибудь понимает, как я могу конвертировать/гарантировать, что массив mysql реагирует как мой ручной?

Дополнительно: это не проблема с sql, поскольку когда я включаю php в свою веб-страницу, а не передаю javascript, ответ эха, записанный на веб-страницу, является «[{« user_name »: "Frank", "user_id": "1", "join_date": "2013-05-15"}, { "user_name": "бб", "день": "5"}]. Поэтому он успешно извлекает информацию из базы данных, и для меня это выглядит как один массив с вспомогательными ассоциативными массивами внутри, что я и был, но я могу только получить имя_пользователя 'bb', не могу получить Frank в javascript , PS Я понимаю, что у двух массивов только общее имя пользователя, но это единственный, к которому я пытаюсь получить доступ в данный момент.

Извините за длинный пост, просто пытаясь убрать все мысли.

Результаты предложений: mysql_fetch_assoc - Orangepill; Я попробовал это, никаких изменений. Из всей документации, которую я могу просмотреть в Интернете, я понимаю, что это возвращает то же, что и mysql_fetch_array ($ result, MYSQL_ASSOC);

Перемещение closeDatabase.php - Michel Feldheim; Перемещение этого не влияет на выход.

console.log (responce_json) - Orangepill; Спасибо за это, не понял, что я мог бы это пересмотреть. Когда я допрошу XMLHttpRequest, я получаю следующее возвращаемое через консоль: XMLHttpRequest {statusText: "OK", статус: 200, response: "[null, {" user_name ":" bb "," day ":" 5 "} ] ", responseType:" ", responseXML: null ...}. Из этого я вижу, что ответ mysql_fetch_array передается как null, что вызвано ошибкой, которую я получаю, которая является «uncaught Error: InvalidStateError: DOM Exception 11». Не может показаться, что это достаточно, чтобы исправить это.

+0

Почему бы не просто использовать mysql_fetch_assoc – Orangepill

+0

, если вы еще не используете консоль в своем браузере, чтобы проверить, что вы получаете от своего вызова ajax. (введите console.log (responce_json) в случай успешного выполнения вашего обратного вызова. Это должно дать вам некоторое представление о том, что вы получаете. – Orangepill

+0

не удается выполнить команду console.log (xmlhttp.responseText) вместо ... возможно, вы являетесь получение какого-либо уведомления о php или что-то, что делает его там, где вы не можете разобрать возвращенный json. – Orangepill

ответ

0

Так что после всего этого я ошибся.

Похоже, что проблема заключалась в том, что при вызове PHP-скрипта для создания веб-страницы можно было получить доступ к операторам include внутри сценария. Когда скрипт вызывается из кода javascript, мои включенные в него инструкции, которые касались открытия и закрытия базы данных, не были найдены.

Это приводит к тому, что ответы не возвращаются.

0

Вы используете скрипт под названием closeDatabase.php. Если это делает то, что предлагает название, вы должны сделать это после вы получили все данные.

+0

closeDatabase - это просто чтобы закрыть базу данных, как вы правильно догадались.К сожалению, я просто попытался переместить его в конец php и непосредственно перед выражением echo (после того, как вся информация была восстановлена), и нет никакой разницы в выходе. – user2419692