2014-10-27 49 views
0

我得到一個包含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,但這並沒有改變任何東西。我認爲它必須是服務器端和會話處理的東西,但我真的非常驚訝,爲什麼這不會一直髮生,並且無法測試/更改以推進。

+0

只是一個建議,返回數據爲JSON,這樣你就不必做所有的拆分業務。 此外,這聽起來像ajax請求可能會返回一個錯誤頁面,因爲ajax_maintenance.php實際上並沒有標籤或任何東西。 Pastebin整個HTML請返回。 – vcanales 2014-10-27 18:25:08

+0

是的,使用JSON,它非常適合這個。至於您的問題,下次出現故障時,請在Firebug中檢查您的傳出請求的請求參數。我懷疑你會在那裏看到意想不到的事情。 – rjdown 2014-10-27 18:29:44

+0

是我還是.php文件不正確?它沒有正確的開始標籤,這可能會導致錯誤(除非啓用短標籤)。 – KarelG 2014-10-27 18:31:37

回答

0

您的發佈請求的數據類型值看起來不正確。你應該修改你的php腳本來返回json格式的數據,並將數據類型改爲json。

像這樣的PHP:

$return_value = json_encode(array($service_nr, $service_city, $service_str)); 
echo $return_value;