2012-06-29 2 views
1

Хотя у меня есть опыт программирования, я совершенно новичок в GS, JS или что-то, что связано с пользовательским интерфейсом.Ajax звонок от Greasemonkey до сервлета: отказ ответа

Сценарий: Создание вызова AJAX из Greasemonkey скрипт для сервлета

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"); 

Проблема:

  • G Код S/JS отлично работает, если URL (в $ .ajax) является некоторым другим существующим API. Ответ отражается в UI

  • Однако, когда я указываю URL-адрес моего сервера, я могу наблюдать в Firebug.Console, что для этого вызова нет ответа HTTP, но статус говорит 200 OK, при этом вся запись была «RED».

  • Когда я проверяю URL-адрес, скопированный из «записи вызова HTTP Firebug», он отлично работает, поскольку я вижу ответ «Текст из сервлета» на новой вкладке.

Может кому-то помочь.

Примечание сайт, на котором Greasemonkey работает, и мой сервер принадлежат к одному домену, т.е.

Greasemonkey сайт: wwww.example.com

Мой сервер: www.myserver.example.com

+0

Вы можете изменить URL-адрес на «поиск» вместо «http://myserver.com:8080/search?». .... также добавьте еще одну строку в ваш сервлет ... resp.getWriter(). flush() – jsshah

+0

Спасибо за ответ. Пытались оба, не повезло. Я предполагаю, что вы имели в виду - «http://myserver.com:8080/search» – Firefox

+0

пропустить часть myserver.com:8080 ... просто указать относительный URL – jsshah

ответ

2

Благодаря @mattedgod. Его комментарий вызвал меня больше исследований, и я нашел ответ.

Добавьте следующий фрагмент, чтобы заставить его работать.

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

Удивительно, но это не сработает, если я явно укажу полный HTTP-адрес своего собственного сервера в заголовке. Мне еще предстоит выяснить, почему.

Смежные вопросы