#javascript #php #mysql
#javascript #php #mysql
Вопрос:
Я работаю над проектом, который использует JavaScript (AJax) для вызова php-файла для запроса сервера MySQL. Я отследил вызов php и вижу, что он работает, но вызов AJax никогда ничего не получает. ниже приведен мой код JavaScript и PHP, может кто-нибудь взглянуть на него и сказать мне, чего мне не хватает.
JavaScript:
$(function() {
$('#members').on('input', function() {
var opt = $('option[value="' $(this).val() '"]');
/*getMember(opt.length ? opt.attr('id'): 0);*/
$.ajax({
url: 'data/members.php',
type: 'POST',
data: {'action':'get', 'status':opt.attr('id')},
sucess: function(data) {
alert(data);
},
error: function() {
alert("We have a problem");
}
});
});
});
php:
$action = $_POST["action"];
if ($action == "get") {
$memberID = $_POST["status"];
try {
require "../../classes/data.php";
$data = new data();
$conn = $data->connect();
$sql = "SELECT * FROM members WHERE memberID = " . $memberID;
$result = $data->query($sql);
while($row = $result->fetch_assoc()) {
$returnData = $row;
}
echo $returnData;
} catch (Exception $ex) {
}
}
Комментарии:
1. Вы пытаетесь отобразить ассоциативный массив?
json_encode
Для начала нужно посмотреть.2. Указывает ли консоль вашего браузера на какие-либо ошибки?
3. Пробовал с json_encode и без, оба не работают.
4. Что указывает консоль вашего браузера? Там появляются какие-либо ошибки? Добавьте console.log(opt.attr(‘id’)) после вашего оператора var opt и посмотрите, что появляется в вашей консоли при выполнении кода.
5. Вы просматривали журналы сервера, чтобы узнать, не сбой ли вашего php? Есть ли у вас какие-либо инструменты в браузере, установленные для просмотра связи между браузером и сервером? Какую отладку вы выполнили?
Ответ №1:
У вас синтаксическая ошибка:
Заменить:
url: 'data/members.php';
для этого:
url: 'data/members.php',
‘,’ в конце
Комментарии:
1. Просто поймал это, просто опечатка, это прямо на коде, запущенном на сервере, который все еще не работает.
Ответ №2:
Часть PHP
// You have SQL injection here
$sql = "SELECT * FROM members WHERE memberID = " . $memberID;
$result = $data->query($sql);
while($row = $result->fetch_assoc()) {
// You probably want this as array
$returnData = $row;
}
// use json_encode
echo json_encode($returnData);
Часть JS:
$.ajax({
url: 'data/members.php',
type: 'POST',
// add data type here
dataType: 'JSON',
data: {'action':'get', 'status':opt.attr('id')},
sucess: function(data) {
...
}
});
Комментарии:
1. Борис, когда я использую NetBeans XDebug I и следую php-коду строка за строкой, данные, отправляемые из AJax, являются правильными (массив из 2 пар значение-> ключ), а затем я выполняю sql-код для запроса базы данных, все работает правильно. $returnData превращается в любой массив с одной записью (это то, что я ищу). Я попытался добавить json_encode, и что бы ни случилось, успех ajax никогда не срабатывает. Я попытался использовать alert для получения результатов и попытался заполнить форму, для которой предназначены данные.
2. ‘#members’ — это поле выбора? попробуйте использовать ‘$(‘#members’).on(‘change’, function() {‘ и вы можете получить текущее значение, выбрав поле выбора с помощью ‘$(this).val()’ вместо ‘$(‘#members’).on(‘input’,function() {‘, если это не работает, вам нужно будет опубликовать больше кода
Ответ №3:
Как только я научусь писать, жизнь будет хорошей …. была опечатка в javascript … имел успех как успех, неудивительно, что он никогда не срабатывал. Теперь еще один вопрос: данные возвращаются в массив: array как мне получить доступ к данным? Если я использую data [«ключ»] Я ничего не получаю. Если я оповещаю данные, я получаю все данные, возвращенные из mysql.
$(function() {
$('#members').on('input', function() {
var opt = $('option[value="' $(this).val() '"]');
/*getMember(opt.length ? opt.attr('id'): 0);*/
$.ajax({
url: 'data/members.php',
type: 'POST',
data: {'action':'get', 'status':opt.attr('id')},
success: function(data) {
alert(data);
},
error: function() {
alert("We have a problem");
}
});
});
});
Ответ №4:
Получает ли данные запись в виде массива. Как указал Борис
while($row = $result->fetch_assoc()) {
// You probably want this as array
$returnData = $row;
}
$returnData всегда получает последнюю строку при перезаписи.
вам нужно закодировать это следующим образом.
$returnData = [];
while($row = $result->fetch_assoc()) {
// You probably want this as array
array_push($returnData,$row);
}
И когда результат возвращается в javascript, вам нужно использовать JSON.parse
$.ajax({
url: 'data/members.php',
type: 'POST',
data: {'action':'get', 'status':opt.attr('id')},
success: function(data) {
var result = JSON.parse(data);
alert(data);
},
error: function() {
alert("We have a problem");
}
});