jquery - 分配 src="@URL.action" 时如何显示特定错误
问题描述
我有这个事件:
function onChange(productName) {
$("#itemImage img").attr('src', "@Url.Action("GetCustomProductImage")" + "?productName=" + productName);
}
当图像无法加载时,我的控制器方法可能会引发异常(可能有多种原因,但主要原因是图像不存在),我可以在浏览器控制台中看到它。
重要的是要说图像不存在于任何服务器目录中并且我不想存储它,我将它作为一个字节数组从保管箱共享文件夹中检索出来。
但我无法在视图中显示用户友好的消息。由于我的控制器的响应存储在 src 中,我无法访问错误信息。
使用事件on("error")
或img.onerror
不提供有关错误的任何信息。
如果我返回Content("<script>alert("+errormessage+");</script>")
它不会显示警报。
我想避免对服务器进行多次调用,因此 ajax 来检查错误然后分配 src 不适合我。
我还想避免将 img 转换为 base 64,然后将其分配给 src,因为 img 变得更大。
我在这里要求一个不可能的事情,或者有一种方法可以在我没有想到的视图上显示错误消息?
如果它太令人困惑,请指出,我会尝试以更好的方式解释自己。谢谢。
解决方案
不要使用图像src
来保存@Url.Action()
- 这不是必需的,而且是不正确的 html。
有些人$.ajax
应该努力实现你想要的。如果您愿意,您可以详细说明一个适当的返回模型(例如,不依赖任何字符串响应),但是这个或更具体的版本应该可以实现您所追求的:
<div id="itemImage">
<img src="/path/to/initial-image.png" />
</div>
<button id="test-button">TEST</button>
<script>
$("#test-button").on("click", function () {
onChange("test-product-name");
});
function onChange(productName) {
var url = "@Url.Action("GetCustomProductImage")";
$.ajax({
url: url + "?productName=" + productName,
type: "GET",
dataType: "json",
success: function (transport) {
if (transport !== "false") {
$("#itemImage img").attr('src', transport);
} else {
$("#itemImage").text("Could not be retrieved");
}
},
error: function () {
console.log("ERROR");
}
});
}
</script>
使用以下控制器操作:
public JsonResult GetCustomProductImage(string productName)
{
// Get image src from productSrc - ideally, build a Json return model
// EITHER:
var transport = "/Path/To/image.png";
// OR:
//var transport = "false";
return Json(transport, JsonRequestBehavior.AllowGet);
}
根据您更新的问题,您可能会发现此答案可用作参考点,以获取对 Dropbox 托管图像的引用或将文件下载到服务器并进行引用。
推荐阅读
- php - 购买特定产品后添加用户元
- c++ - 确保动态分配的矩阵是正方形的方法?
- java - 如何在 url 中查找子路径
- php - 如果满足单个条件,php将数组元素移到第一个
- python - 如果在 Windows 7 上同时运行,两个 python 应用程序会在一段时间后崩溃
- firebase - 创建 24 小时后删除 Firestore 文档
- c++ - 像 c# 中的 ConcurrentBag 一样,cpp(MFC) 中有哪些可用的选项?
- php - 如何对这个动态创建的表中的每一列求和,如 excel
- jenkins - Github jenkins webhook 集成失败
- ruby - Clojure 相当于 ruby 的#methods 方法?