2014-09-19 4 views
5

यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि जावा सर्वलेट में कोई GET या POST अनुरोध आ रहा है, क्या AJAX अनुरोध है? मेरी खोज में अब तक जिस पद्धति में आई है, वह हैजावा सर्वलेट: अनुरोध करने का सर्वोत्तम तरीका AJAX

"XMLHttpRequest".equals(request.getHeader("X-Requested-With")); 

क्या इसे संभालने के अन्य तरीके हैं? ऐसा लगता है कि हेडर पर भरोसा करना बहुत मजबूत समाधान नहीं है।

+4

के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2419223/how-to-detect-if-a-request-is [कैसे करता है, तो एक अनुरोध ajax या सामान्य सर्वर साइड पर है पता लगाने के लिए] -जैक्स-या-सामान्य-ऑन-सर्वर-साइड) – Ilya

+2

[जेएसपी/सर्वलेट का संभावित डुप्लिकेट कैसे पहचानें कि HTTP अनुरोध AJAX अनुरोध से आया है] (http://stackoverflow.com/questions/14004877/jsp-servlet -how-to-पहचान-if-the-http-request-came-a-ajax-request) – icza

+0

कोई अन्य विश्वसनीय तरीका afaik नहीं है। लेकिन आपके द्वारा पोस्ट की गई विधि में क्या गलत है? – icza

उत्तर

-1
$.ajaxSetup({ 
    headers: {"X-My-Header":"Bob"} 
}); 
+0

कृपया कोड पोस्ट न करें; समझाओ कि यह क्या करता है और आपको क्यों लगता है कि यह सही समाधान है। – dimo414

+0

एक नियंत्रक जो दोनों प्रकार के अनुरोध से निपटने की आवश्यकता है अनुरोध प्रकार का पता लगाने के लिए request.getHeader() विधि का उपयोग कर सकते हैं। अनुरोध प्रकार प्राप्त करने के लिए डेवलपर एक्स-अनुरोध-हेडर पैरामीटर के साथ उपयोग कर सकता है। अजाक्स अनुरोध अनुरोध के मामले में .getHeader ('x-request-with') स्ट्रिंग के रूप में XMLHttpRequest को वापस लौटाएगा और वापस लौटाएगा। –

+2

आप इसे सुधारने के लिए अपने उत्तर पर "संपादित करें" पर क्लिक कर सकते हैं। लेकिन आपकी टिप्पणी 'एक्स-अनुरोधित-साथ' शीर्षलेख पर चर्चा करती है ओपी पहले से ही आपके पोस्ट किए गए समाधान का उपयोग नहीं कर रहा है। – dimo414

1
HTML दस्तावेज़ के बाद

jQuery.post() विधि का उपयोग करता सर्वलेट को एक अतुल्यकालिक AJAX अनुरोध भेजने के लिए:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>click demo</title> 
    <style> 
    body {font-family: verdana;margin:20px; font-size: 14px;} 
    div.container {border: 1px solid black; 
    background-color: #f0ffff;padding:10px;width:460px; 
    } 
    p.result {color:red;font-weight:bold;} 
    h3 {color:blue;} 
    </style> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
</head> 
<script> 
$(document).ready(function() { 
    $("#myAsyncBtn").click(function() { 
     $.post(
       "async", 
       function(data) { 
       $(".result").html(data); 
       } 
     ); 
    }); 
}); 
</script> 
<body> 
<div class="container"> 
<h3>Ajax Request Detection using Java</h3> 
<p>Click this button to make a Asynchronous Request 
    <button id="myAsyncBtn"> Click Here</button> 
</p> 
<p>Now click a Link to make a synchronous request 
    <a href="async">Sync Call</a> 
</p> 
<p class="result"></p> 
</div> 
</body> 
</html> 

एक नियंत्रक जो अनुरोध के दोनों प्रकार से निपटने के लिए अनुरोध का प्रकार निर्धारित करने request.getHeader() विधि का उपयोग कर सकते हैं की जरूरत है। अनुरोध प्रकार प्राप्त करने के लिए डेवलपर x-requested-with हेडर पैरामीटर का उपयोग कर सकता है। अजाक्स अनुरोध request.getHeader('x-requested-with') के मामले में XMLHttpRequest वापस स्ट्रिंग के रूप में वापस आ जाएगा null

package org.techzoo.async; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.ServletOutputStream; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/async") 
public class AsyncServlet extends HttpServlet { 

    public AsyncServlet() { 
     super(); 
    } 

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

     String headerName = request.getHeader("x-requested-with"); 

     if(null == headerName){ 
      PrintWriter out = response.getWriter(); 
      String html = "<h3>Clinet send a Synchronous request</h3>" + 
       "<p><a href=\"index.jsp\">Go Back</a> to main page</p>"; 
      out.write(html); 
     } 
     else { 
      ServletOutputStream out = response.getOutputStream(); 
      out.print("Ajax Request Detected"); 
      out.flush(); 
     } 
    } 

} 
संबंधित मुद्दे