2017-05-30 63 views
0

我已經通過幾乎所有關於這個問題的堆棧溢出答案來解決這個問題,我嘗試了很多東西,但我仍然收到空,我只是試圖發送一個Java腳本變量到使用AJAX從一個else在JS語句,下面的節目,IAM在alertbox越來越null如何克服從AJAX發送到servlet的getParameter()的空值問題?

else { //begin JS else 
        var somevar="iam the user"; 

        $.ajax({ 
         type:"POST", 
         url:"Register", 
         dataType: 'json', 
         contentType:'application/json', 

         data:{ 
         Subject:somevar}, 

          cache: false, 
         processData:false, 
         success: function(data){ 
          alert(data); 
         }, 
         error: function(){ 
          alert("error"); 
         } 


      }); 
} //end else 

而且在我的servlet我doPost方法(註冊)

@Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
      resp.setContentType("text/plain"); // Set content type of the response so that jQuery knows what it can expect. 
      resp.setCharacterEncoding("UTF-8"); 
     String user = req.getParameter("Subject"); 
       //resp.sendRedirect("registration.jsp"); 
       PrintWriter out = resp.getWriter(); 
        out.println(user); 
       //String pathInfo = req.getRequestURI(); 


} 

我嘗試了很多不同的東西,但命名很少:

1 - 如果我取消,並使用這條線和評論了其他線路:resp.sendRedirect("registration.jsp");

然後我得到error在alertbox作爲響應。

2中頻I從servlet發送一個其他的字符串(不是用戶的值)返回到AJAX,例如一個響應:out.println("some string"); 然後我得到在JS alertbox就好

其他中該字符串我已經嘗試過的事情,很明顯,值是從ajax發送到servlet成功,但是當服務器讀取它時,它是空的,服務器可以發送字符串響應回ajax(除getparameter()值以外的任何變量)和阿賈克斯得到它很好。

鑑於此,我嘗試了一些處理步驟(提取servlet上的JSON元素),使用了答案such as this answer。但是,當我嘗試這個答案後,警告框再次給error。我知道還有其他方式發送數據使用http(send()方法爲例),但我發現更好的只是因爲我發送多個數據對象不僅僅是一個(在我的例子中它只有一個,但我將使用它來發送多個數據元素)。 任何幫助將不勝感激。

UPDATE:取得了一些進展,通過查看更多的答案,如this one我能夠同時修改答案,我的代碼,並將它們結合在一起,也與有關瀏覽器的調試@stdunbar的評論的幫助下非常有幫助,我能夠在瀏覽器中跟蹤事物,現在問題幾乎解決了,但並不完全,現在iam能夠從請求中提取值並將其轉換爲字符串,但是當我將字符串發回給ajax(js),alertbox顯示(error),但好消息是,瀏覽器調試器顯示respose爲一個字符串,但alertbox無法顯示它,下面是我更新的servlet代碼:

@Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 

      PrintWriter out = resp.getWriter(); 

      StringBuilder sb = new StringBuilder(); 
    BufferedReader br = req.getReader(); 
    String str; 
    while((str = br.readLine()) != null){ 
     sb.append(str); 
    }  
    try{ 
    JSONObject jObj = new JSONObject(sb.toString()); 
    String extracted=jObj.getString("Subject").toString(); 
    resp.setContentType("application/json"); 
    resp.setCharacterEncoding("UTF-8"); 
    // resp.setContentType("text/plain"); // Set content type of the response so that jQuery knows what it can expect. 
    // resp.setCharacterEncoding("UTF-8"); 
    out.println(jObj); 
    }catch (JSONException e) { 
    } 


    } 

我的AJAX:

else { //begin JS else 
      var somevar="iam the user"; 

       $.ajax({ 
        type:"POST", 
        url:"Register", 
        dataType: 'json', 
      contentType:'application/json', 
       data:JSON.stringify({Subject:somevar}), 


         cache: false, 
        processData:false, 
        success: function(data){ 
         alert(data); 
        }, 
        error: function(){ 
         alert("error"); 
        } 


     }); 

      } //end JS else 
+0

您是否首次驗證是否使用瀏覽器調試工具從瀏覽器發送了正確的數據? – stdunbar

+0

不,我不知道這是可能的,iam試圖...謝謝 – HMA

+0

實際上有東西發送:{「主題」:「iam用戶」}和響應爲空。 – HMA

回答

0

所以我張貼的更新後,我進一步的工作就可以了,終於解決了這個問題,這個問題是,內容類型設置應用程序/ JSON在servlet和JS都/ AJAX(這是正確的),但我期待一個串中的alertbox彈出,所以除了在servlet更新的代碼,我改變這條線在AJAX:

alert(data); // this line trying to get the json object (wrong) 

alert(data.Subject); // this line is getting the value of the key (correct) 

感謝所有的答覆和意見,他們都幫助。