2014-10-09 128 views
1

我正在一個簡單的tomcat web應用程序上工作。如果此用戶名已經註冊,客戶端只需將json中的用戶名數據發送到服務器端和服務器端返回。 這是我的代碼。ajax POST不能發送數據到servelet

AJAX部分:

var udata = new Array(); 
udata.push({ name: uname}); 
$.ajax({ 
    url: '/TestProj/Controller?action=checkuname', 
    type: 'POST', 
    dataType: 'json', 
    data: udata, 
    //contentType:'application/json, charset=utf-8', 
    success: function(data){ 
     checkstatus = data.status; 
    }, 
    error: function(x,y,z){ console.log(JSON.stringify(x)); } 
}); 

servlet的一部分: 我使用一個控制器來派遣檢查名的servlet請求。

String username = request.getParameter("name"); 

    if (checkuser(username)){ 
     status = "false"; 
    }else{ 
     status = "true"; 
    } 
    response.setContentType("application/json"); 
    PrintWriter o = response.getWriter(); 
    o.println("{\"status\":\""+status+"\"}"); 
    //o.println("{\"status\":\""+username+"\"}"); 

我嘗試打印出「status」和「username」的內容,但它們都是null。這是否意味着我沒有成功通過ajax發送數據給servlet。我可能會弄亂json數據部分。 任何幫助將不勝感激。

更新: 我將ajax部分更改爲此,它的工作原理。有人能讓我知道如何以json的方式做到這一點?

AJAX部分:

var udata = new Array(); 
udata.push({ name: uname}); 
$.ajax({ 
    url: '/TestProj/Controller?action=checkuname&uname='+uname, 
    type: 'POST', 
    dataType: 'json', 
    data: udata, 
    //contentType:'application/json, charset=utf-8', 
    success: function(data){ 
     checkstatus = data.status; 
    }, 
    error: function(x,y,z){ console.log(JSON.stringify(x)); } 
}); 

回答

1

它並沒有真正意義的使用JSON對象這樣一個簡單的事情發佈用戶名到一個servlet。只需使用一個簡單的請求參數併爲自己節省很多麻煩。但是,如果您必須使用JSON來執行此操作,則需要解決一些問題。

  1. 除非您同時處理多個用戶,否則javascript數組不是一個好的數據類型選擇。一個簡單的對象會更好。

    var udata = {name: uname}; 
    
  2. 您的發佈數據應該是字符串,而不是javascript對象(數組或其他)。在錯誤函數中使用JSON.stringify()

    $.ajax({ 
        url: '/TestProj/Controller', 
        type: 'POST', 
        dataType: 'json', 
        data: 'action=checkuname&jsonObject=' + JSON.stringify(udata), 
        success: function(data){ 
         checkstatus = data.status; 
        }, 
        error: function(x,y,z){ console.log(JSON.stringify(x)); } 
    }); 
    

    然而,udata就是這樣一個簡單的JavaScript對象,你還不如自己字符串化它,因爲原生JSON對象不會是舊的瀏覽器使用。

    var udata = '{name:"'+uname+'"}'; 
    
    $.ajax({ 
        url: '/TestProj/Controller', 
        type: 'POST', 
        dataType: 'json', 
        data: 'action=checkuname&jsonObject=' + uname, 
        success: function(data){ 
         checkstatus = data.status; 
        }, 
        error: function(x,y,z){ console.log(JSON.stringify(x)); } 
    }); 
    

    而且,儘管它可能歸結爲個人喜好,在action參數是在後身體更好,而在查詢字符串。畢竟,這是一篇文章。

  3. request.getParameter()不會幫助您檢查JSON字符串。它只能得到請求參數的值。所以

    String json = request.getParameter("jsonObject") 
    // this variable will have a value like "{name: 'somedude'}" 
    

    你需要解析服務器上的這個JSON字符串。你可以嘗試用String方法自己做這個,像Gson這樣的庫是一個更好的選擇。你可以獲取用戶名值是這樣的:

    String username = (String)(new Gson().fromJson(json, Map.class).get("name")); 
    
+0

我知道,那不是評論,但我真的要感謝你對所有的這些詳細的說明。它可以節省我大量的時間來自己解決問題。 – SCV 2014-10-09 15:23:22

+0

很高興幫助。祝你好運。 – Tap 2014-10-09 15:38:41