2013-03-20 61 views
1

這個特定的AJAX調用返回由responseText返回的值前面的「\ n」。爲什麼' n'被預先寫入我的HTTP(AJAX)responseText?

它以前沒有這樣做,現在當我測試有效的返回代碼if (request.responseText == 100)它失敗,因爲它現在等於「\ n100」。

我知道我可以剝離「\ n」,但這將是一種解決方法,我寧願找到原因並修復它。

這裏是我的客戶端代碼:

function AJAX(){ 

    var xmlHttp; 

    try{ 
     xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari 
     return xmlHttp; 
    } 
    catch (e){ 
     try{ 
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer 
      return xmlHttp; 
     } 
     catch (e){ 
      try{ 
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
       return xmlHttp; 
      } 
     catch (e){ 
      alert("Your browser does not support AJAX!"); 
      return false; 
     } 
     } 
    } 
} 


function logDetails() { 

    var request, 
     Result = document.getElementById('Result'), 
     message = document.getElementById('message'), 
     url = 'ajax/login.user.php?', 
     us = document.getElementById('username').value, 
     pa = document.getElementById('password').value; 

    Result.innerHTML = 'Logging in...'; 

    if (document.getElementById) { 

     request = AJAX(); 

    } 

    if (request) { 

     request.onreadystatechange = function() { 

      if (request.readyState == 4 && request.status == 200) { 

       var r = request.responseText; 
//var r = 100; 
       if (r == '100') { 

        Result.innerHTML  = 'You are now logged in.'; 
        window.location.href = "prebooks.php"; 

       } 

       else if (r == '101' || r == '102') { 

        Result.innerHTML = 'Your login attempt failed.'; 
        resetDetails(); 

       } 

       else if (r == '103') { 

        Result.innerHTML = 'Sorry, you have no books subscription.'; 

       } 

       else if (r == '999') { 

        Result.innerHTML = 'You have no more attempts!'; 
        message.innerHTML = 'Please call us on (02) XXXXXXX so that we can assist you.'; 

       } else { 

        alert(r); 

       } 
      } 
     }; 
    } 
    // add my vars to url 
    url += "arg1="+us+"&arg2="+pa; 

    request.open("GET", url, true); 
    request.send(null); 
} 

這裏是我的服務器端代碼:

<?= 100 ?> 

好吧,我簡化了,但我已經嘗試了呼應「100」直接與問題依然存在。

UPDATE 我誤以爲回聲'100'沒有直接解決問題。它的確如此。對不起,感謝您指引我正確的方向。

但是,這讓我試圖找到輸出在服務器端如何被污染。

在服務器端,我有一個類來處理身份驗證並返回值(100)以進行回顯。這是該行:

echo $L->doLogin($pkg); 

與在doLogin()方法返回的線路有:

$pkg[status]=100; 
return $pkg[status]; 

而且,以確保換行沒有在某個地方漏水,如果我更換echo $L->doLogin($pkg);echo 100;它的工作。

UPDATE 2 - 解決 事實證明,這個問題是在其中包括該doLogin()方法中所包括的類文件,這最近被更新,包括在所述頂部的單個換行檔案,開幕前<?

非常感謝大家的意見(我還是會在沒有它的客戶端代碼中摸索)!

+1

我的猜測是,在你顯示的腳本之前,你的php中有一個空行。這是服務器端文件的*整個*內容嗎? – jcoder 2013-03-20 10:32:52

+1

首先確定它是客戶端還是服務器問題 - 看看XHR究竟是從服務器返回的(使用firebug還是其他控制檯來檢查請求),但幾乎肯定它是@jcoder所說的。 – kuncajs 2013-03-20 10:34:51

+2

你的服務器端代碼是雙重回顯,刪除'='或'echo' – 2013-03-20 10:39:20

回答

0

我有同樣的問題,並發現(通過向Ajax添加dataFilter選項,警報顯示字符串化的JSON返回),它確實是有腳本語法問題的PHP腳本。然後,PHP服務器預先掛起一個HTML迷你文檔來發出錯誤信號。但是,當返回AJAX時,由於dataType是'json',整個返回的PHP響應首先被json解析,從而剝離了所有預置的HTML並僅留下換行符。在有效的JSON返回數據前面的這些換行符導致JSON數據被視爲語法錯誤,就是這樣!使用dataFilter選項將警報中的原始數據發送出去後,我能夠看到PHP腳本的初始錯誤,並且一旦更正,就不會有更多的新行預先登記!

相關問題