2011-08-23 105 views
1

在portlet中,我有一个JSP页面,我已经声明了一个resourceURL并将它映射到一个具有overriden serveResource方法的Java类。getJSON回调函数没有在js文件中调用

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

我有一个js文件中的JavaScript whicn反过来激发这样

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

     //mycode 


     }) 

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

+0

你在萤火虫检查是否存在错误 – Rafay

+0

萤火没有给我任何错误。事实上,我已经把警报放在回调函数中。他们没有人开火,这表明它没有进入回调。 –

回答

0

首先,检查您的JavaScript中的URL,以便它包含参数“jsoncallback =?”。

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

    //mycode 

}) 

jQuery将使用ID替换jsoncallback参数后的最后一个问号。

此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); 
}) 

希望这有助于

帕特里克