2016-01-13 42 views
2

在我的項目中,有一個URL通常會響應一個圖像,其中Content-Type:image/png由Java用用戶數據動態繪製。JavaScript在一個請求中處理不同的內容類型

但有時候會導致某些原因,用戶不應該看到圖像或圖像不能與用戶的數據繪製。在包含有
Content-Type:application/json; charset=utf-8

這是可能的錯誤信息顯示,而服務器響應Content-Type:image/png否則以提醒,而服務器響應Content-Type:application/json; charset=utf-8錯誤信息的圖像這種情況下,服務器將響應JSON結果?

我可以處理任何一種響應內容類型,但在處理一個請求中的兩種內容類型方面苦苦掙扎。這可能嗎?


編輯

我嘗試使用AJAX像

<img id="preview-img"/> 

$.ajax({ 
    url: "/preview", 
    type: "GET", 
    dataType: "JSON", 
    success: function(data) { 
     if (!data.success) { 
      alert(data.msg); 
     } 
    }, 
    error: function() { 
     alert("occur error"); 
    } 
}); 

有了上面的代碼,alert(data.msg)時可用服務器響應JSON結果和錯誤消息,但alert("occur error")會觸發時,服務器響應正確的圖像。

和我一起刪除dataType重試:

$.ajax({ 
    url: "/preview", 
    type: "GET", 
    success: function(data) { 
     if (!data.success) { 
      alert(data.msg); 
     } 
    }, 
    error: function() { 
     alert("occur error"); 
    } 
}); 

高興地看到,success功能被觸發無論是服務器響應圖片或JSON
但我不知道如何使用,看起來像響應數據顯示圖像

ÿØÿàJFIFÿÛC  
$.' ",#(7),01444'9=82<.342ÿÛC   
2!!22222222222222222222222222222222222222222222222222ÿÀ%a"ÿÄ  
ÿĵ}!1AQa"q2¡#B±ÁRÑð$3br  
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ 
ÿĵw!1AQaq"2B¡±Á #3RðbrÑ 
$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ?÷ú(¢ 
...... 

一堆垃圾。


現在我暫時不處理JSON結果

<img id="preview-img"/> 

var image = new Image(); 
image.onload = function() { 
    $("#preview-img").attr("src", "/preview"); 
}; 
image.onerror = function() { 
    alert("could not load image"); 
}; 

image.src = "/preview"; 
+0

是否使用AJAX? –

+1

郵政編碼..如果你使用ajax,你可以。 –

+1

是否只有兩個端點(一個用於成功/錯誤狀態,一個用於圖片,如果發生錯誤則爲空白)提高效率的唯一原因是? – GregL

回答

1

請求失敗,「數據類型」設置因爲jQuery試圖解析響應,JSON,但沒有這樣做,如果服務器響應與一個圖像。因此調用錯誤回調。

在我看來,首選解決方案是設置一個HTTP代碼!= 200(例如,404代表未找到),以防服務器無法提供圖片。在這種情況下將調用錯誤回調函數,並且可以向用戶顯示錯誤對話框。否則,您可以繼續在成功回調中顯示圖像。

關於「我不知道如何使用,看起來像響應數據顯示圖像」看這裏:Using jQuery's ajax method to retrieve images as a blob

+0

我可以在錯誤回調中獲得JSON結果嗎? – Joe

+0

是的:http://stackoverflow.com/a/9066846/198996 – TomTasche

+0

請標記我的答案是正確的,如果它解決了你的問題。 @Joe – TomTasche