【问题标题】:getJSON callback function not getting called in a js filegetJSON 回调函数没有在 js 文件中被调用
【发布时间】:2011-08-23 17:12:54
【问题描述】:

在portlet 中,我有一个JSP 页面,我在其中声明了一个resourceURL 并将它映射到一个Java 类,该类具有一个覆盖的serveResource 方法。

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

我在一个 js 文件中有一个 javascript,然后会触发这样的 ajax 调用

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

        //mycode


        })

这个 js 被导入到 jsp 中。现在,当我单击链接时,它会触发 javascript,ajax 调用也很好,请求被传递给 java 类。但是响应不会返回到回调函数。我怀疑是因为这是在一个单独的 js 文件中,所以响应将转到 jsp 页面而不是 js 文件内的回调函数。如果我把它作为内联脚本放在 jsp 中,这个完全相同的代码就可以工作。但是我需要将 javascript 代码放在一个单独的 js 文件中并使其工作。有没有办法在我触发 getJSON 时传递一些上下文信息?.. 有没有办法做到这一点?

【问题讨论】:

  • 你检查了萤火虫是否有任何错误
  • FireBug 没有给我任何错误。事实上,我已经在回调函数中放置了警报。他们都没有触发,这表明我没有进入回调。

标签: jquery portlet getjson


【解决方案1】:

首先,检查您的 javascript 中的 URL,使其包含参数“jsoncallback=?”。

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

    //mycode

})

jQuery 会将 jsoncallback 参数之后的最后一个问号替换为 ID。

然后,此 ID 将用于服务器端,在您的 JSP 中,以创建一个响应,该响应将以根据 ID 值命名的函数开始。

简单的 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);
})

希望对你有帮助

帕特里克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2017-07-26
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多