2011-09-01 159 views
1

從我的客戶端代碼中,我正在對我的servlet進行AJAX調用。如果我使用GET作爲請求方法。一切正常,我得到迴應。但是當我將請求作爲POST發送時,servlet無法發送響應。從日誌中我發現,在使用POST進行ajax調用時,servlet中的「request」對象爲null。根據這篇文章: Servlet response to AJAX request is empty,我爲同源策略設置標題。向Servlet發出AJAX POST請求失敗

下面是我的參考代碼:

function aimslc_ajaxCall(url,callback, postParams){ 
    var xmlhttp = null 
    if (window.XMLHttpRequest){ 
    xmlhttp=new XMLHttpRequest(); 
    } 
    xmlhttp.onreadystatechange=function(){ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    eval(callback+"("+xmlhttp.responseText+")"); 
    } 
    } 

    if(postParams!=null && typeof postParams!="undefined"){ 
      xmlhttp.open("POST",url,true); 
    xmlhttp.send(postParams); 
    }else{ 
      xmlhttp.open("GET",url,true); 
     xmlhttp.send(); 
    } 
} 

servlet代碼:

public void doProcess (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     logger.info("doProcess::start..."+request.getQueryString()); 
     response.setHeader("P3P","CP='NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM'"); 
    response.setHeader("Access-Control-Allow-Origin","*"); 
    response.setHeader("Access-Control-Allow-Credentials","true"); 
    response.setHeader("Access-Control-Allow-Methods","POST, GET"); 
} 

拋出的request.getQueryString()

+0

在ajax中檢查你的if語句,好像它總是執行沒有任何有效載荷的xmlhttp.send()。嘗試提醒以檢查每次選擇哪個條件選項。 – doNotCheckMyBlog

+0

其實如果沒有參數,我用GET方法發出請求。編輯代碼,使其更清晰 – indusBull

回答

3

空異常,如果你做一個職位的所有數據在請求正文中,而不是在url上。從here您看到getQueryString只能獲取網址上的內容。

請參閱here瞭解如何獲取請求正文。此外,如果您的數據是名稱/值對,則可能需要使用getParameter及相關方法。

如果請求爲空,請問您是否在您的servlet上實現了doPost

+0

這是有道理的。我確實有doPost()。以下是同一個問題 - 「request.getAttribute()」和「request.getParameter()」之間有什麼區別。在我使用的servlet中,request.getAttribut()用於檢索請求參數。這似乎適用於GET,但不適用於POST。 – indusBull

+0

getParameter用於獲取from key = val的參數。 get屬性獲取請求屬性,它們不一樣。你想使用getParameter和關聯的方法 – hvgotcodes

+0

@indusBull:'HttpServletRequest'有'getParameter()'和'getAttribute()'方法。你認爲哪一個*它返回請求**參數**?嘗試從邏輯上思考... – BalusC