2012-04-06 160 views
0

我將爲短信管理系統實現搜索功能,用戶可以在其中輸入名稱(關鍵字)並獲取相關信息。將servlet的值傳遞給jsp

這是我在 「InstantSMS.jsp」 寫的代碼


$("#search").click(function() { 

     var keyword = $("#customerName").val(); 
     $.ajax({ 

      type : "GET", 
      url : "SearchingClass", 
      data : { 
       key : keyword 
      } 

     }).success(function() { 

      $.getJSON('SearchingClass', function(data) { 

       $("#resultTable").html(data.messageRes); 
      }); 


     }) 

     .error(function(request, error) { 

      $().toastmessage('showWarningToast', "Error! "); 
     }); 

    }); 

這裏的 'SearchingClass' 是servlet的名稱。 這是「SearchingClass.java」


protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 

    String keyword = request.getParameter("key"); 
    SmsMessagesService search = new SmsMessagesService(); 
    ArrayList<Customers> result = new ArrayList<Customers>(); 
    System.out.println("For testing Keyword is ::: "+keyword); 

    result = search.searchCustomer(keyword); 
    String table = "in here i'll generate a code to draw a table using html" 

    Map<String, Object> data = new HashMap<String, Object>(); 
     data.put("messageRes", table); 


    // Write response data as JSON. 
    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(new Gson().toJson(data));  
} 

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

    doGet(request,response); 

} 

的代碼現在的問題是後我按下搜索按鈕搜索過程或doGet方法運行2次。

在第一次運行輸出 「爲了測試關鍵字:::約翰」 第二次運行 「爲了測試關鍵字:::」

我認爲,第二次運行是因爲「$ .getJSON發生()「 方法。 如何避免這種情況?

如何使用$ .getJSON()方法只獲取「字符串表」而不運行「doGet()」方法?

是否有另一種方法使用ajax從servlet到jsp的字符串?

可以使用$ .getJSON()方法傳遞此關鍵字嗎?

謝謝!

+0

'.getJSON()'當然對servlet進行了另一個調用,但是在那個特定的請求中它並沒有發送密鑰。這完全解釋了輸出中沒有關鍵字的第二次運行。你不希望它回到servlet嗎?如果不是,'.getJSON()'方法的初衷是什麼,以便有人可以幫助你找出需要砍掉什麼? – 2012-04-06 04:27:56

回答

1

您可以使用速記AJAX調用。

var keyword = $("#customerName").val(); 

$.get("SearchingClass", {key:$keyword}, function(data) { 

      $("#resultTable").html(data.messageRes); 
     }); 
2

我不是100%遵循代碼,但我想象,你只想用你傳遞它的關鍵字查詢一次servlet。 .ajax()方法因此已經在做與.getJSON()相同的工作,無論如何這只是.ajax()的別名。

瞎猜,但我的猜測是,你想要這個:

// ... 
}).success(function(data) { 
    $("#resultTable").html(data.messageRes); 
    }); 
// ... 
+0

在此先感謝 – Anjula 2012-04-28 10:37:06