В качестве опции выбора у меня есть поле выбора HTML, содержащее 20 разных номеров (например, «123456790») с триггером onChange, который инициирует регулярный AJAX POST, который должен задайте текст для определенного элемента HTML. Код выглядит так:Ajax-запрос, возвращающий целую страницу в два раза
HTML
<select id="mtn_select" name="mtn_select" onChange="setDetailValues(this.value);">
<option value="0" selected>Please select</option>
<?
foreach ($servicearray as $serviceno => $element) {
echo '<option value="'. $serviceno .'">'. $serviceno .'</option>';
}
?>
</select>
JS
function setDetailValues(select_value) {
if (select_value == 0) {
$('#service_city').text('');
} else {
$.ajax({
type: 'POST',
url: 'modules/ajax_maintenance.php',
data: { servicenumber : select_value },
dataType: 'text',
success: function(return_data)
{
if (return_data) {
var myarr = return_data.split("|");
$('#service_city').text(myarr[1]);
} else {
$('#service_city').text('no data found');
}
},
error: function(return_data)
{
$('#service_city').text('an error occured');
}
});
PHP (ajax_maintenance.php с жестко закодированных значений в настоящее время)
<?
$service_nr = strtolower($_POST['servicenumber']);
$service_city = "New York";
$service_str = "Someplace 22a";
$return_value = "";
$return_value = $service_nr ."|". $service_city ."|". $service_str;
echo $return_value;
?>
Теперь это скорее простой, и он работает по назначению, но, к сожалению, все равно ломается, как половина времени. Когда он будет работать, ответ XHR-POST (проверенный через Firebug) будет «123456789 | Нью-Йорк | Где-то 22a», как ожидалось, и значение города будет обновляться просто отлично.
Но каждый ответ POST будет содержать весь код HTML-кода от <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
до последней строки </html>
. Когда это происходит, ajax-вызов не распознает его как ошибку или отсутствующие данные, поэтому HTML-код всего веб-сайта будет находиться внутри переменной обратного вызова return_data и распечатывается на веб-сайте, где значение города должно появляются.
Веб-сайт, на котором этот материал интегрирован, немного сложнее с довольно многими (неизвестными мне) php-includes, используя параметры GET для выбранного в данный момент модуля (поэтому все ссылки указывают на index.php с разными параметрами) и идентификатор сеанса текущего пользователя. Сначала я подумал, что это может быть проблемой (из-за свойств аутентификации/авторизации и SID), поэтому я вручную добавил параметры GET к моему ajax-POST, но это ничего не изменило. Я предполагаю, что это должно быть что-то серверное и с обработкой сеанса, но я действительно ошеломлен, почему это не происходит все время и в недоумении, что проверить/изменить, чтобы продвинуться.
Просто предложение, вернуть данные в формате JSON, так что вы не должны делать все, что расщепление бизнеса. Также звучит так, что запрос ajax может возвращать страницу с ошибкой, так как ajax_maintenance.php на самом деле не имеет тегов или чего-то еще. Pastebin весь html вернулся, пожалуйста. – vcanales
Да, используйте JSON, он очень подходит для этого. Что касается вашей проблемы, в следующий раз, когда вы получите сбой, проверьте параметры запроса для исходящего запроса в Firebug. Я подозреваю, вы увидите там что-то неожиданное. – rjdown
это я или это .php-файл не правильный? У него нет правильного тега открытия, что может привести к ошибке (если не включены короткие теги). – KarelG