2013-07-23 58 views
1

我正在發佈一個jQuery AJAX POST到一個servlet並且數據是JSON字符串的形式。 我不確定數據是否獲得發佈。另外,我想通過從json對象中獲取來驗證登錄名和密碼。讀取servlet中的JSON值

繼承人的代碼片段:

<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script> 

    <script type="text/javascript">    
    function doajax(){ 

    var fullname=$("#fullname").val; 
    var mobileno=$("#mobileno").val; 


     $.ajax({ 
     url: 'dvsds', 
     type: 'POST', 
     dataType: 'json', 
     data:{ "mobileno":mobileno, "fullname":fullname}, 
      error:function(){ 
       alert("error occured!!!"); 
      }, 
      success:function(data){ 
       alert(data.message); 
     } 
     }); 
     } 
</script> 

我的servlet端代碼:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    response.setContentType("application/json"); 
    PrintWriter out = response.getWriter(); 
    try { 
     String message=null; 

     JSONObject jObj = new JSONObject(request.getParameter("jsondata")); 
     Iterator<String> it = jObj.keys(); //gets all the keys 

     String Name=null; 
     String mobileno=null; 

     while(it.hasNext()) 
     { 
      String key = (String) it.next(); // get key 

      if(key.equals("fullname")) 
       Name = (String)jObj.get(key); 
      else if(key.equals("mobileno")) 
       mobileno=(String)jObj.get(key); 
     } 


     if(Name=="abc" && mobileno=="123") 
      message="success"; 
     else 
      message="fail"; 

     JSONObject jsonObject = new JSONObject(); 
     jsonObject.put("message", message); 
     out.println(jsonObject); 

回答

0

您不需要字符串化數據...只是把它作爲一個普通的舊JavaScript對象.. 。通過指定數據類型爲json ... jquery將弄清楚如何打包請求中的數據

無需在服務器端更改任何東西

所以,如果您的AJAX調用變爲:

$.ajax({ 
    url: 'dvsds', 
    type: 'POST', 
    dataType: 'json', 
    data: jsondata, 
     error:function(){ 
      alert("error occured!!!"); 
     }, 
     success:function(data){ 
      alert(data.message); 
    } 
    }); 

檢索它們在servlet作爲

String fname = request.getParameter("fullname"); 
String mobileno = request.getParameter("mobileno"); 

我想你會需要小心區分大小寫

EDITED

我看到你可以改變你的腳本如下。

<script type="text/javascript">    
function doajax(){ 

var fullname=$("#fullname").val; 
var mobileno=$("#mobileno").val; 

var postReqData = {}; // Create an empty object 
postReqData['mobileno'] = mobileno; 
postreqData['fullname'] = fullname; 


    $.ajax({ 
    url: 'dvsds', 
    type: 'POST', 
    dataType: 'json', 
    data: postReqData, 
     error:function(){ 
      alert("error occured!!!"); 
     }, 
     success:function(data){ 
      alert(data.message); 
    } 
    }); 
    } 

+0

jsshah嗨,我沒有提到,但仍以其表現失敗了,因爲從servlet響應看重的返回。 – shanky

+0

我編輯了答案......你可以試試這個 – jsshah

0

jQuery.Ajax功能的datatype屬性規定如下:

的數據類型(默認:智能猜測(XML,JSON,腳本或HTML))

類型:字符串

您期待的數據類型e服務器。

所以,你發送的不是JSON字符串。你發送的是普通的舊請求數據。

你可以在你的servlet使用得到這樣的數據:

String mobileno = request.getParameter("mobileno");