2017-08-01 62 views
-1

我不繼續,因爲小時,我很frustated,因爲我無法找到我的錯,和/或我失敗的誤解:的Javascript:jQuery的POST請求未正常工作

我想呼籲後端JSON數據 - 通過下面的源代碼:

function dosomething(type) 
{ 
    $.post("dosomethingontheserver", {type}, function(myjson) { 
     // do something usefull with myjson data 
    }, 'json') 
    .done(function() { 
    // just ignore 
    })  
    .fail(function(xhr, textStatus, errorThrown) {  
     console.log(xhr.statusText); 
     console.log(textStatus); 
     console.log(errorThrown); 
     console.log("type "+type);  
    }) 
    .always(function() { 
    // alert("finished for type="+type); 
    }); } 

如果該代碼被稱爲經:

dosomething(0); 

萬事大吉。但是,如果我把這兩次這樣的:

dosomething(0); 
dosomething(1); 

我得到的控制檯上執行以下操作:

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data Stack-Trace: [email protected]/jquery-1.12.4.js:9011:10 [email protected]/jquery-1.12.4.js:9335:19 [email protected]/jquery-1.12.4.js:9789:15 [email protected]/jquery-1.12.4.js:10311:8

看來,(第一)請求由呼叫從第二取消和響應不再(再)是json格式。服務器總是返回一個json格式 - 所以服務器端沒有錯誤。如果我在dosomething()函數中花費了一些額外的時間 - 比如alert('hello'),這種情況就不會發生了。

任何想法/提示爲什麼秒調用會中斷第一個(正在進行的)調用?

+0

也許服務器無法處理多個調用並引發錯誤?您是否嘗試過記錄以確認服務器是否爲這兩個調用返回了json數據? – H77

+0

好點。我會檢查這.... –

+0

服務器可以處理multipe請求。後端是在eclipse環境中執行的sevlet(在tomcat 8中)。我在它裏面放了一些調試行 - 兩個請求都被接收到並且兩個響應都被傳輸。兩個響應都被一個靜態字符串取代 - 所以兩個響應都是相同的。 –

回答

-1

嘗試指定內容類型和接受型

+0

如何?被調用的servlet會像下面這樣設置它:servletResponse.setContentType(「application/json」);並在JavaScript中設置爲「'json'」 –

+0

如果您要使用的默認值是默認值,則沒有理由設置contentType。 –

-1

感謝所有的反應。

我找到了。我真是個白癡。在servlet的OutputStream中的變量聲明爲「靜態」,所以秒呼叫也會修改那個流,導致併發請求的問題。