#javascript #php #ajax
#javascript #php #ajax
Вопрос:
Я только что написал свой первый Ajax-запрос, но он не работает. Его необходимо обновить, когда выбрано новое значение в раскрывающемся списке.
Это мой код javascript:
$(document).ready(function() {
function ajaxLoaded(response) {
$('#performanceResults').html(response);
}
function doRequest() {
$.ajax({
url: "results.php",
type: 'POST',
success: ajaxLoaded
});
}
$('#performance').change(doRequest);
});
и вот как я извлекаю часть q (которая не работает):
public function getResults() {
$intCase = intval ( $_POST ['q'] );
var_dump ( $intCase );
if ($intCase == 1 or $intCase == 2 ) {
if ($intCase == 1) {
$strSql = 'select bidder_id, won, lost, fillrate, costs, cost_auction from result_bidder where tagload = ( select max(tagload) from result_bidder) order by cost_auction asc limit 1';
}
if ($intCase == 2) {
$strSql = 'select bidder_id, won, lost, fillrate, costs, cost_auction from result_bidder where tagload = ( select max( tagload ) from result_bidder ) order by fillrate asc limit 1';
}
$arrBestPerformer = $objDatabase->queryresult ( $strSql );
echo "<table border='1'>
<tr>
<th>bidder_id</th>
<th>won</th>
<th>lost</th>
<th>fillrate</th>
<th>costs</th>
<th>cost_auction</th>
</tr>";
while ( $row = mysqli_fetch_array ( $arrBestPerformer ) ) {
echo "<tr>";
echo "<td>" . $row ['bidder_id'] . "</td>";
echo "<td>" . $row ['won'] . "</td>";
echo "<td>" . $row ['lost'] . "</td>";
echo "<td>" . $row ['fillrate'] . "</td>";
echo "<td>" . $row ['costs'] . "</td>";
echo "<td>" . $row ['cost_auction'] . "</td>";
echo "</tr>";
}
echo "</table>";
}
}
Моя Форма:
общедоступная функция SelectPerformanceIndicator() {
$this->getResults ();
$str = '<form >';
$str .= 'Select your performance indicator<br>';
$str .= '<select id = "performance">';
$str .= '<option value = "">Select Performance Indicator</option>';
$str .= '<option value = "1">Cost per auction </option>';
$str .= '<option value = "2">Fillrate </option>';
$str .= '</select>';
$str .= '</form>';
$str .= '<br>';
$str .= '<div id="performanceResults">';
return $str;
}
Комментарии:
1. просто echo $_POST[‘q’]; Вы ничего не возвращаете прямо сейчас
2. Является ли этот 1 вкладыш вашим полным PHP-скриптом?
3. @GaijinJim я знаю. Как мне вернуть значения с помощью Ajax?
4. @TiMESPLiNTER Нет, это не так. После этого появляется только форма и оператор mysql. Ничего особенного.
5. Или попробуйте JS-фреймворк, например,
jQuery
он поможет вам писать совместимые с кроссбраузерными JS и абстрактные AJAX-запросы на очень высоком уровне. Таким образом, вы можете убедиться, что ваш AJAX-запрос работает. Вероятно, вашvar
in JS просто пуст, когда вы его отправляете?
Ответ №1:
Ваша проблема в том, что ваша строка данных POST недопустима.
xmlhttp.send("q =" str);
Должно быть
xmlhttp.send("q=" str);
Без пробела между q
и =
.
И вы пропустили отправку заголовка, чтобы сообщить PHP, что он должен сопоставить данные, отправленные с запросом, с $_POST
переменной.
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
Итак, ваша правильная функция будет:
function showUser(str) {
if (str=="") {
document.getElementById("performance").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 amp;amp; xmlhttp.status==200) {
document.getElementById("performance").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","results.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("q=" str);
}
Но опять же: используйте jQuery для выполнения ваших AJAX-запросов. Если вы используете jQuery, вам больше не нужно бороться с подобными ошибками.
Комментарии:
1. Исправлено, но оно по-прежнему не работает. Спасибо, что заметили эту ошибку!
2. Опять же: используйте jQuery для обработки ваших AJAX-запросов. Это намного проще и совместимо с кроссбраузерными. Смотрите здесь, как AJAX работает с jQuery
3. Спасибо за ваш обновленный ответ. Я исправил это в части заголовка, но он по-прежнему не работает. Поможет ли это, если я опубликую функции php?
4. Было бы полезно, если бы вы использовали jQuery для выполнения AJAX-задач!
5. Используется jQuery. Но теперь он вызывает мой интерфейс два раза вместо того, чтобы просто показывать таблицу.
Ответ №2:
Вы добавили пробел в строку запроса, "q ="
это не ведет себя как q
ключ в $_POST
переменной, удалите пробел между key
и =
xmlhttp.send("q =" str);
Для
xmlhttp.send("q=" str);
Обновить ответ: AJax POST
будет работать, когда запрос будет иметь Content-type: application/x-www-form-urlencoded
заголовок.
пожалуйста, добавьте заголовок перед send
методом
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
OR
вы можете отправить запрос GET
методом без заголовка
Комментарии:
1. Исправлено, но оно по-прежнему не работает. Спасибо, что заметили эту ошибку!