функция обратного вызова getJSON не вызывается в js-файле - PullRequest
1 голос
/ 23 августа 2011

В портлетах у меня есть страница JSP, где я объявил resourceURL и сопоставил его с классом Java, который имеет переопределенный метод serveResource.

   <portlet:resourceURL var="myURL" >
    <portlet:param name="dataType" value="VOICE" />
</portlet:resourceURL>

У меня есть javascript в js-файле, который, в свою очередь, запускает ajax-вызов, подобный этому

$.getJSON(URL,{operator : 'XYZ'},function(b) {

        //mycode


        })

Этот js импортируется в jsp. Теперь, когда я нажимаю на ссылку, он запускает javascript, ajax-вызов также проходит нормально, и запрос передается в класс java. Но ответ не возвращается к функции обратного вызова. Я подозреваю, что поскольку он находится в отдельном js-файле, ответ идет на страницу jsp, а не на функцию обратного вызова внутри js-файла. Этот точно такой же код работает, если я поместил его как встроенный скрипт в jsp. Но мне нужно поместить код javascript в отдельный файл js и заставить его работать. Есть ли способ передать некоторую контекстную информацию, когда я запускаю getJSON? .. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 23 августа 2011

Для начала проверьте свой URL в своем javascript, чтобы он содержал параметр "jsoncallback =?".

$.getJSON('http://mysite.com/my.jsp?jsoncallback=?',
  {operator : 'XYZ'},function(b) {

    //mycode

})

jQuery заменит последний вопросительный знак после параметра jsoncallback идентификатором.

Этот идентификатор будет затем использоваться на стороне сервера в вашем JSP для создания ответа, который будет начинаться с функции, названной из значения идентификатора.

Простой пример JSP:

<%@ page language="java" contentType="application/json" pageEncoding="UTF-8"%>
<%@ page import="java.io.*"%>
<%    
    PrintWriter writer = response.getWriter();
    String callback = request.getParameter("jsoncallback");

    if (callback != null && callback.length() > 1)
    {
        writer.write(callback + "({ \"mykey\" : \"myvalue\" });");
    }
%>

Это может привести к ответу, который будет выглядеть примерно так:

jQuery16205149872086476535_1314088378455({ "mykey" : "myvalue" });

Итак, в коротком ответе, если ваш ответ json НЕ обернут в это имя функции, функция обратного вызова не сработает,вместо этого вы получите сообщение об ошибке, которое вы могли бы увидеть следующим образом:

$.getJSON(URL,{operator : 'XYZ'},function(b) {

    //mycode

}).error(function(jqXHR, textStatus, errorThrown) {
    alert("Error: " + textStatus + " errorThrown: " + errorThrown);
})

Надеюсь, это поможет

Patrik

...