2014-04-22 111 views
1

我是jQuery和$ Ajax()的新手,但對Java EE非常熟悉,並且完全停留在此。ajax沒有被servlet接收

我從螢火蟲的JavaScript控制檯,它發送給servlet的請求的js函數和信息 - 但從未收到郵件給servlet。

當獲取或交到達的servlet,它會永遠記錄的東西,但是當「稱爲」由$阿賈克斯它從來沒有任何記錄()。

下面是一些從螢火輸出:

about to call ajax()<br> 
showCID.jsp (line 12)<br> 

    GET http://localhost:8080/RHY_Tools/AjaxServlet?id=123<br> 

jquery....min.js (line 6)<br> 
done with call to ajax()<br> 
showCID.jsp (line 41) Error:<br> 
showCID.jsp (line 30) Status: error<br> 
showCID.jsp (line 31) readyState <br> 

沒有什麼日誌從服務器英寸

如果我貼

http://localhost:8080/RHY_Tools/AjaxServlet?id=123 into the browser window the server log shows: 

INFO: Id parameter is: 123<br> 
INFO: done now.<br> 

下面是函數(和上面的日誌顯示它被稱爲)

var myurl="AjaxServlet"; 
function checkCID(cid) { 

console.log("about to call ajax()"); 

$.ajax({ 
    url:myurl , 
    data: {id: 123}, 
    type: "GET", 

    success: function(resp) { 
     $("").text(resp).appendTo("body"); 
    }, 

    error: function(xhr, status, errorThrown) { 
     console.log("Error: " + errorThrown); 
     console.log("Status: " + status); 
     console.dir(xhr); 
    }, 

    complete: function(xhr, status) { 
     alert("The request is complete!"); 
    } 
}); 

console.log("done with call to ajax()"); 
} 
+0

你能打開瀏覽器的網絡控制檯,看看響應包含什麼嗎? –

+0

你可以通過這條線將它添加到body之前記錄resp $(「」).text(resp).appendTo(「body」); console.log(「Response:」+ resp); – RawAliasCoder

+0

1)$ Ajax()調用沒有網絡流量! 2)沒有辦法查看resp,因爲成功:從未達到。我已經添加了console.log(但它什麼都不做)。 – user3200050

回答

0

幾點建議:

  • 網址不該」 t需要完整的主機(因爲它是ajax,默認情況下它已經連接到了瀏覽器)。你嘗試myurl ='/ RHY_Tools/AjaxServlet?id = 123'?
  • 檢查從螢火蟲網絡流量面板,看看是否從客戶的角度來看,它得到一個響應(404,500,200等),或者簡單地超時。這應該幫助您調試它實際上達到了,如果任何地方
  • 最後,這可能只是一直在崗/ HTML上方一個錯字,但我看到的網址有「
    」在結束了嗎?
+0

我只是將servlet命名爲「AjaxServlet」 - 日誌顯示了來自jQuery的具有正確完整url的條目。我已經運行了這100次各種變化 - 一次它的工作 - 然後停止工作零部署的變化。從那裏我可以看到響應的樣子 - 看起來jQuery在調用servlet之前拋出一個錯誤。因爲否則,螢火蟲將顯示來自該呼叫的NO NETOWRK流量。但是在錯誤消息中沒有任何可讀的內容讀取「錯誤」 – user3200050

0

這可能是由交叉起源腳本引起的。您的HTML和JavaScript位於何處?在與您的servlet相同的服務器上?在另一臺服務器?或者在你的本地磁盤上?

如果在瀏覽器中直接從文件系統,然後打開時HTML文件中的腳本試圖調用服務器,那麼這就是問題。您的腳本嘗試訪問與腳本來源不同的服務器。

在這種情況下瀏覽器正常地詢問服務器是否將接受來自另一來源的請求,並且如果服務器確認僅然後將瀏覽器的請求到服務器。 見http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

解決方案:

  1. 把你的HTML和JavaScript到同一臺服務器上的servlet。

  2. 或者,在服務器上添加一個設置相應標頭的處理程序。這將告訴瀏覽器它將接受來自其他來源的請求。

+0

包含Ajax()的servlet和jsp在同一個應用程序中的同一臺服務器上。 Firebug控制檯顯示jQuery的日誌條目,其中完全展開的地址是正確的 - 並且在粘貼到瀏覽器中時起作用。看起來Ajax()實際上並沒有提出請求 - 在發出請求之前它失敗了。 – user3200050

0

感謝您的建議。我問的是錯誤的問題,所以你不能給出正確的答案。

這與調用$ Ajax()或servlet等無關。

這是因爲我調用函數作爲HTML表單中文本字段中的onChange()事件。我還不瞭解如何導致症狀的細節 - 不知怎的,腳本運行完成但Ajax失敗 - 但是如果我對完全相同的servlet調用完全相同的函數 - 但在HTML表單中以不同的方式,所有好。