在servlet中读取JSON值

时间:2013-07-23 06:24:24

标签: ajax json servlets

我将jQuery AJAX POST发布到servlet,数据采用JSON String的形式。 我不确定是否发布了数据。另外,我想通过从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);

2 个答案:

答案 0 :(得分: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);
     }
   });
  }

答案 1 :(得分:0)

jQuery.Ajax函数的datatype属性声明如下:

  

dataType(默认值:Intelligent Guess(xml,json,script或html))

     

类型:字符串

     

您期望从服务器返回的数据类型。

因此,您发送的内容不是JSON字符串。你发送的是普通的旧请求数据。

您可以使用以下命令在servlet中获取此数据:

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