2

こんにちは、Ajax を使用してサーブレットから返される単純な文字列を取得しようとしていますが、readystate が 4 の間、ステータスが常に 0 であるため、何も返されませんでした。

これが.jsコードです

function validate(choice) {  
    //var url = "http://localhost:8080/examples/validate.do?id=" + escape(choice);                  
    var url = "../../validate.do" 
    if(window.XMLHttpRequest) {  
        req = new XMLHttpRequest();  
    }else if(window.ActiveXObject) { 
        req = new ActiveXObject("MSXML2.XMLHTTP.3.0"); 
    }  

    alert("IM IN VALIDATE() with " + choice); 
    req.open("GET", url, true);  
    req.onreadystatechange = callback;  
    req.send(null);   
    return false;

}  

function callback() { 
    if(req.readyState == 4 ) { 
        if(req.status == 200){ 
            var check = req.responseText;  
            alert(check);  
        }
        else
            alert(req.status);
    }  
}  

および Java コード

package model;  

import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;


public class DoAjaxServlet extends HttpServlet {  

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
        response.setContentType("text/html;charset=UTF-8"); 
         PrintWriter out = response.getWriter();  
        try {  

            response.setContentType("text/html"); 
            response.setHeader("Access-Control-Allow-Origin", "*"); 
            response.setHeader("Cache-Control", "no-store");  
            response.setHeader("Pragma", "no-cache");  
            response.setDateHeader("Expires", 0);
            String resultStr = "JUST RETURNING THIS STRING";
            out.write(resultStr);
        } finally {   
            out.close();  
        }  
    }   

    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
        processRequest(request, response);  
    }   

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

    @Override  
    public String getServletInfo() {  
        return "Short description";  
    }  

}  

Chromeを使用してTomcat 7でこれを実行しており、ローカルで実行するのではなく、localhost:8080からhtmlファイルにアクセスしたため、浮かんでいる多くのソリューションは機能しません。

に行く

http://localhost:8080/examples/validate.do 

Chrome では文字列が問題なく出力されるので、URL を間違って書いていないと思います。.js ファイルは次のような場所にあります

http://localhost:8080/examples/jsp/HTE/my.js

また、「http://localhost:8080/examples/validate.do」を .js の URL として直接使用し、Java ファイルに setHeader("Access-Control-Allow-Origin", "*") を追加しようとしましたが、何も変わりません.

投稿を検索した後、私はこれについてアイデアを実行しています...これがどこでうまくいかないのか教えてください。

4

0 に答える 0