2014-03-05 22 views
0

我有一個電話:不能讓我的jQuery Ajax調用返回XML

$.get("${pageContext.request.contextPath}/maze/View/${maze}", 
            function(response){drawMaze(response);}); 

在JSP。它調用:

protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException 
    { 
     System.out.println("Got here"); 
     URL url = new URL(request.getRequestURL().toString()); 
     String [] path = url.getPath().split("/"); 

     mazeJPA.Maze maze = mazes.getMaze(Integer.parseInt(
                path[path.length - 1])); 
     System.out.println(maze.getId()); 
     response.setContentType("text/xml;charset=UTF-8"); 

     PrintWriter out = response.getWriter(); 
     out.println(xmlString(maze));  
     out.flush(); 

    } 

和printlns打印我期望在Eclipse中的控制檯。我有一個JavaScript函數

function drawMaze(response) 

定義在一個單獨的腳本文件中,但我無法獲取xml來處理它。在JavaScript控制檯中的錯誤是:

ReferenceError: response is not defined 
get stack: function() { [native code] } 
message: "response is not defined" 
set stack: function() { [native code] } 
__proto__: Error 

我在這裏不理解什麼?

[編輯] 這是在我的JSP中的JS:

$.get("${pageContext.request.contextPath}/maze/View/${maze}", 
            function(response){drawMaze(response);}); 

,目前我只有定義的功能。我正在嘗試編寫XML,但那也不起作用。該函數沒有被調用,我認爲,但我不明白爲什麼。

+0

'迴應沒有定義'是一個很大的線索。您的問題很可能是通話失敗,或者您沒有將響應推送到「響應」中。你確定它不指望JSON?請提供更多的JS代碼。 – spikeheap

+0

如果您使用fiddler來檢查響應中實際返回的內容,它看起來像是您期望的XML嗎? (我懷疑問題的很大一部分是$ .get()實際上並不是將響應XML blob傳遞給您的處理程序。) –

+0

開始的一個好地方是啓動Chrome Developer Tools或Firebug並檢查XML從服務器返回,看看它是否是你期望的。 – spikeheap

回答

0

我已經得到了它的工作感謝指針我真的不知道從哪裏開始沒有這個線程。我不希望在這個項目上與Ajax合作,並且像往常一樣,我很着急。我呼籲現在看起來是這樣的:

<script> 
$.ajax('${pageContext.request.contextPath}/maze/View/${maze}', { 
     type: 'GET', 
     dataType: 'xml', 
     success: function(response) { 
     drawMaze(response); 
     }, 
     error: function(req, status, err) { 
     console.log('something went wrong', status, err); 
     } 
    }); 
</script> 

我不知道如果我得到使用是不正確的,但是很多變更後,這是我最後用一個調用。我也有一些,我不得不修復XML解析錯誤(我的XML),但現在我drawMaze方法看起來像:

function drawMaze(response) 
{ 
    algoName = $(response).find("algorithm"); 
    console.log(algoName.text()); 
} 

我在控制檯中正確的文本。我可以繼續我現在需要做的處理。