2014-01-29 57 views
0

這是我的JSP文件的jQuery的getJSON方法永遠等待,如果請求需要很長的時間

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
Heelo; 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script> 
<script> 
$(function() { 
    console.log('something'); 
    $.getJSON('test', function(data) { 
     console.log(data); 
    }); 
}); 
</script> 
</body> 
</html> 

這是我的servlet文件

protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    try { 
     Thread.sleep(360000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    PrintWriter out = null; 
    try { 
     out = response.getWriter(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    out.write("[]"); 
} 

這是發送到一個servlet的請求。但是如果這個servlet需要很長時間(例如6分鐘)來處理,那麼沒有數據被打印到控制檯。在上面的例子中,我可以看到'something'打印到控制檯,但沒有'[]'。

但是,如果我直接對該servlet執行curl,則可以返回結果。

任何幫助?

+0

爲什麼你會希望客戶要等待6分鐘,結果? –

+0

@MikeBrant因爲我的servlet對數據庫有一個查詢可能需要很長時間,所以在這裏我只是強迫它等待6分鐘來重現問題。 – Cacheing

回答

0

由於getJSON在客戶端運行並在服務器上運行,所以這可能是網絡相關的問題。 您可以使用fiddler/chrome web開發工具來查看需要花費的時間。 這可能是簡單的事情,如名稱解析或網絡服務器配置。

+1

我剛剛創建了一個非常簡單的測試,它不起作用,我更新了問題。 – Cacheing

+0

感謝您的更新。這更有意義。 –

+0

Tomcat的任何配置設置?當我在本地運行它時會導致這種情況,但不在服務器上。 – Cacheing

0

它可能會超時。 請參閱以下討論中的如何處理超時。

jQuery getJSON with timeout

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback, 
    timeout: 360000 
}); 
+0

不,它不是,我試圖設置超時是一個大數字,但它不起作用。 – Cacheing