Javascript Greasemonkey对Servlet的Ajax调用:响应失败

Javascript Greasemonkey对Servlet的Ajax调用:响应失败,javascript,jquery,ajax,servlets,greasemonkey,Javascript,Jquery,Ajax,Servlets,Greasemonkey,虽然我有编程经验,但我对GS、JS或任何与UI相关的东西都是全新的 场景:从Greasemonkey脚本向Servlet进行AJAX调用 Greasemonkey/JS代码: function getResultsData(query){ alert("Getting the Data"); $.ajax( { cache: false, data: {"q":query}, dataType:"text", url: "http://

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

场景:从Greasemonkey脚本向Servlet进行AJAX调用

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,整个条目变为“红色”

  • 当我测试从Firebug的“http调用条目”复制的url时,它工作得非常好,因为我可以在新选项卡上看到响应“来自Servlet的文本”

有人能帮忙吗

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

Greasemonkey网站:www.example.com


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

感谢@mattedgod。他的评论促使我进一步研究,我找到了答案

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

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

令人惊讶的是,如果我在头中显式地指定我自己的服务器的完整http地址,它就不起作用了。我还不知道为什么

你能把url改成“搜索”而不是“?”。。。。还要在servlet中添加另一行。。。resp.getWriter().flush()感谢您的回复。两个都试过了,运气都不好。我猜,你的意思是——”“跳过myserver.com:8080部分。。。只需给出相对URL,您通常无法对其他服务器进行ajax调用。阻止此操作是为了防止跨站点脚本攻击。我不确定你会如何用greasemonkey脚本与另一台服务器通信,尽管考虑到你不能在用户访问的页面上放置任何服务器端代码…@Firefox否浏览器会阻止请求。如果是javascript,那么所有这些都发生在客户端,记住。另外,我不是100%确定,但我认为就浏览器而言,
myserver.example.com
example.com
是不同的服务器