从Greasemonkey到Servlet的Ajax调用:响应失败

时间:2012-06-29 21:39:33

标签: javascript jquery ajax servlets greasemonkey

虽然我有编程经验,但对于GS,JS或任何与UI相关的东西都是全新的。

场景:从Greasemonkey脚本调用AJAX到Servlet

Greasemonkey / JS代码:

function getResultsData(query){
alert("Getting the Data");
$.ajax( 
    {
    cache: false,   
    data: {"q":query},      
    dataType:"text",
    url: "http://myserver.com:8000/search?",
    success: processData        
    }); //end of $.ajax }

function processData(data){
alert("Got the data");
var myResultDiv = document.getElementById("searchRes");
myResultDiv.innerHTML = data; }

Servlet代码:

        System.out.println("-----------This is an AJAX call------------------");
        //Commented the original logic
        resp.setContentType("text/plain");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().write("Text from Servlet");

问题:

  • 如果url($ .ajax)是其他现有API,则GS / JS代码可以正常工作。响应在UI中反映

  • 但是,当我提供服务器的url时,我可以在Firebug.Console中观察到该调用没有http响应,但状态为200 OK,整个条目变为“RED”。

  • 当我测试从Firebug的'http call entry'复制的url时,它正常工作,因为我可以在新选项卡上看到响应'来自Servlet的文本'。

有人可以帮忙。

注意运行greasemonkey的网站,我的服务器属于同一个域,即

Greasemonkey网站:wwww.example.com

我的服务器:www.myserver.example.com

1 个答案:

答案 0 :(得分:2)

感谢@mattedgod。他的评论引发了我更多的研究,我找到了答案。

添加以下代码段以使其正常工作。

response.setHeader("Access-Control-Allow-Origin", "*");

令人惊讶的是,如果我在标头中明确指定我自己的服务器的完整http地址,它就不起作用。我还没找出原因。

相关问题