2017-02-26 7 views
0

ajaxを使用してクロスドメインコールについて説明するいくつかのサイトを見てきました。それらはすべて、あまりにも複雑すぎる、または特定のようです。以下は、サーバー上の特定のJSPにリクエストパラメータを送信できるようにする単純なhtmlページです。単純なクロスドメインのajax呼び出しでhtmlページを返す方法

私はブラウザで、例えば、jQueryのか、AJAXを使用しない簡単なWebページから行うことができ
<!DOCTYPE html> 
<html> 
<head> 
    <title>jQuery AJAX POST Form</title> 
    <meta charset="utf-8"> 
</head> 
<body> 

<div id="response"> 
    <pre></pre> 
</div> 

<form id="my-form"> 
    <input type="text" id="userName" name="first-name" placeholder="User Name" /> 
    <input type="text" id="password" name="last-name" placeholder="Password" /> 

    <button type="submit">Submit</button> 
</form> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script> 
    (function($){ 
     function processForm(e){ 
      $.ajax({ 
       url: 'myserver.com:8080/myApp/user-login.jsp', 
       crossDomain: true, 
       dataType: 'html', 
       type: 'post', 
       contentType: 'application/x-www-form-urlencoded', 
       data: $(this).serialize(), 
       success: function(data, textStatus, jQxhr){ 
        $('#response pre').html(data); 
       }, 
       error: function(jqXhr, textStatus, errorThrown){ 
        console.log(errorThrown); 
       } 
      }); 

      e.preventDefault(); 
     } 

     $('#my-form').submit(processForm); 
    })(jQuery); 
</script> 
</body> 
</html> 

http://myserver.com:8080/myApp/user-login.jsp?userName=bloaty&password=narf 

私がログインしたhtmlページの上映を取得

上記を使用して試してみると、クロスドメインクエリはサポートされていません。 JSPが呼び出されると、HTMLページが返されます。私はここで何が欠けていますか?

+0

このHTMLページのURLは何ですか? –

+0

正確なエラーは何ですか? – rckrd

+0

JSPページでは、次のようにCORSヘッダーを追加する必要があります。http://stackoverflow.com/q/20881532/101087 – NineBerry

答えて

0

私はその遅すぎるを知っているが、この1つは、誰かのために参考になっうかもしれません。

$.ajax({ 
xhrFields: { 
    withCredentials: false 
     }, 
         url: 'gethtmlservlet?urlofjsp=myserver.com:8080/myApp/user-login.jsp', 
         type: 'post', 
         success: function(data, textStatus, jQxhr){ 
          cosnole.log(data); 
         }, 
         error: function(jqXhr, textStatus, errorThrown){ 
          console.log(errorThrown); 
         } 
        }); 
0

これは誰もが直面した非常に一般的なエラーですが、このエラーの解決方法はJsoupです。 最初私はあなたが全体のhtmlページを取得する実行後、以下のajax callとも servletに書かれているコードを入れて... はAJAX呼び出しのURLでサーブレットのURLを渡しAJAX呼び出し&を使用してサーブレットを呼び出す

<html> 
     <head> 
      <title>jQuery AJAX POST Form</title> 
      <meta charset="utf-8"> 
     </head> 
     <body> 

     <div id="response"> 
      <pre></pre> 
     </div> 

     <form id="my-form"> 
      <input type="text" id="userName" name="first-name" placeholder="User Name" /> 
      <input type="text" id="password" name="last-name" placeholder="Password" /> 

      <button type="submit">Submit</button> 
     </form> 

     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
     <script> 

      (function($){ 
       function processForm(e){ 
        $.ajax({ 
         url: 'gethtmlservlet?urlofjsp=myserver.com:8080/myApp/user-login.jsp', 
         type: 'post', 
         success: function(data, textStatus, jQxhr){ 
          cosnole.log(data); 
         }, 
         error: function(jqXhr, textStatus, errorThrown){ 
          console.log(errorThrown); 
         } 
        }); 
        e.preventDefault(); 
       } 
       $('#my-form').submit(processForm); 
      })(jQuery); 
     </script> 
     </body> 
     </html> 

In servlet mavenを使用している場合は、pom.xmlにJsoupの依存関係を追加するか、それに応じて.jarファイルを組み込むことができます。 このout.println行はhtmlをajaxの成功に送ります。 はhtmldocumentを表示するので、HTMLページ全体が表示されます。 ノードまたは要素を見つけるには、以下のコードを使用します。
私はhtmlからiframe要素を探したいので、以下のコードを使用して、あなたが見つけたいタグ名を書くことができます。

import org.jsoup.Jsoup; 
    import org.jsoup.nodes.Document; 
    import org.jsoup.nodes.Element; 

    public class gethtmlservlet extends HttpServlet { 

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

      response.setContentType("text/html;charset=UTF-8"); 
      PrintWriter out = response.getWriter(); 

      try { 
      String jspurl = request.getparameter("urlofjsp"); 

      Document htmldocument = Jsoup.connect(jspurl).get(); 
       out.println(htmldocument); 
      Elements iframe = productdocument.select("iframe"); 

       } 
       catch(Exception e) 
       { 
       System.out.println(e); 
       } 
      } 
     } 
+0

これは私のサーブレットではなく、私のサーバー上にないことに注意してください。 HTMLを取得して文字列として取得し、必要なものを切り取り、他のフィードから同様に取得したデータでアセンブルし、集計を作成する必要があると私は信じています。 –

関連する問題