我得到一個包含20個不同數字代碼(即「123456790」)作爲選擇選項的HTML選擇框,其中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 | New York | Someplace 22a」,並且城市值將更新得很好。
但是每隔一個POST響應將包含<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
的整個HTML網站代碼,直到最後一行</html>
。發生這種情況時,ajax調用不會將其識別爲錯誤或缺失數據,因此整個網站的HTML代碼將位於「return_data」回調變量中並打印在網站上,城市值應該顯示在該網站上出現。使用當前選定模塊的GET參數(因此所有鏈接都指向index.php和不同的參數),php-includes有點複雜(我不知道)當前用戶的會話ID。起初我以爲這可能是一個問題(由於認證/授權的東西和SID),所以我手動添加GET params到我的ajax-POST,但這並沒有改變任何東西。我認爲它必須是服務器端和會話處理的東西,但我真的非常驚訝,爲什麼這不會一直髮生,並且無法測試/更改以推進。
只是一個建議,返回數據爲JSON,這樣你就不必做所有的拆分業務。 此外,這聽起來像ajax請求可能會返回一個錯誤頁面,因爲ajax_maintenance.php實際上並沒有標籤或任何東西。 Pastebin整個HTML請返回。 – vcanales 2014-10-27 18:25:08
是的,使用JSON,它非常適合這個。至於您的問題,下次出現故障時,請在Firebug中檢查您的傳出請求的請求參數。我懷疑你會在那裏看到意想不到的事情。 – rjdown 2014-10-27 18:29:44
是我還是.php文件不正確?它沒有正確的開始標籤,這可能會導致錯誤(除非啓用短標籤)。 – KarelG 2014-10-27 18:31:37