2011-08-23 51 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); 
}) 

希望這有助於

帕特里克