2013-10-15 57 views
0

我有一個函數,當點擊一個按鈕時被調用,這個函數使用jQuery發送一個ajax請求。在成功時,我有一些合乎邏輯的if和else if語句。 Web服務器只能發送2種類型的文本響應。它可以是「成功」或「錯誤」。但是當測試這兩種情況時,他們似乎失敗了。我已經添加了一個else語句和一個警告,告訴我服務器發送的是什麼,但正如我所料,它是「成功」或「錯誤」,這是我在服務器中編寫servlet的方式,它只能發送「成功「或」錯誤「作爲迴應。此外,我的警報吐出「成功」或「錯誤」,我不明白這裏有什麼問題。請幫忙。if和else-if語句拒絕在jQuery的ajax函數中工作

function deleteRecord(productID, description) 
{ 
    var errorMessage = '<td class="red-left">There was an error. <a href="">Please try again.</a></td>'; 
    var successMessage = '<td class="green-left">Product '+productID+' ('+description+') has been deleted sucessfully.</td>'; 
    var data = "productID="+productID+"&description="+description+"&deleteProduct=true"; 
    $.ajax({ 
     type: "GET", 
     url: "deleteInventoryRecord.mpcs", 
     data: data, 
     cache: false, 
     success: function(info) 
     { 
      if(info == 'Success')//This does not work 
      { 
       $(".green-left").replaceWith(successMessage); 
       $("#message-green").fadeIn("slow"); 
       $("#product-"+productID).remove(); 
      } 
      else if(info == 'Error')//This does not work 
      { 
       $(".red-left").replaceWith(errorMessage); 
       $("#message-red").fadeIn("slow"); 
      } 
      else//This works always but I dont need it 
      { 
       alert(info); //It always says "Success" or "Error" 
      } 
     }, 
     dataType: 'text' 
    }); 
} 

這裏是發送響應的servlet代碼:

private void deleteProduct(HttpServletResponse response, String productID) throws IOException 
{ 
    try 
    { 
     response.setContentType("text/html"); 
     InventoryDAO iDao = new InventoryDAO(); 
     if(iDao.deleteProduct(productID) == true) 
      response.getWriter().println("Success"); 
     else 
      throw new RuntimeException("Error"); 
    } 
    catch(ClassNotFoundException | IOException | SQLException | RuntimeException xcp) 
    { 
     response.getWriter().println("Error"); 
    } 
} 
+0

'deleteInventoryRecord.mpcs'是怎麼樣的? – Sergio

+1

你確定響應中沒有空格或隱藏字符?您是否嘗試過使用$ .trim(info) –

+0

您是否有可能使用前導或尾隨空格,非打印字符以及不同的文本大小來返回值? –

回答

2

將採取在這裏瞎猜,並說該服務器發送一個BOM在UTF8的反應,和這會導致您的比較失敗。

要確認,請嘗試alert(info.length)。 「成功」應該是7,「錯誤」應該是5。如果不是,那麼你可能有一個BOM。

另一件要檢查的事情當然是響應中沒有空白 - 再次,length檢查將有助於驗證這一點。

您可以通過將服務器端腳本編碼爲「無BOM的UTF8」來解決此問題,根據您的編輯器有時稱爲「ANSI UTF8」。另外,改變你的if塊:

if(info.match(/Success$/)) ... 
else if(info.match(/Error$/)) ... 
+0

我試過alert(info.length)。它給了我9的「成功」和7的「錯誤」,但我不明白爲什麼。 – Jevison7x

+0

BOM是兩個字符。這是我懷疑的;) –

1

你方法設置內容類型爲 「text/html的」,但您發送純文本。這很可能會混淆jQuery,因爲它試圖根據發送的內容類型頭來猜測info的類型。無論是使用「text/plain」還是更好的「application/json」,都可以向客戶端發送更多信息。