如何在jQuery中将已经转为二进制的图像byte[]用$.ajax在页面正常显示?
有一点我觉得很奇怪,这是ashx代码publicvoidProcessRequest(HttpContextcontext){intwidth=440,height=20...
有一点我觉得很奇怪,这是ashx代码
public void ProcessRequest (HttpContext context) {
int width = 440, height = 200;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.YellowGreen);
Font font = new Font("宋体", 12);
Brush brush = new SolidBrush(Color.Red);
Pen pen = new Pen(Color.Blue, 1);
g.DrawLine(pen, 40, 80, 100, 80);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
context.Response.ContentType = "image/jpg";
context.Response.BinaryWrite(ms.ToArray());
}
在页面中如果直接将img的src属性改为“Handler.ashx”就可以正常显示,可如果这样就错了:
$.ajax({
type: "post",
contentType: "application/json",
url: "Handler.ashx",
success: function (result) {
$('img').attr('src',result);
}
});
为什么?
如果我改用.asmx来返回byte[],那么在jQuery中又该用$.ajax如何使得显示图像呢? 展开
public void ProcessRequest (HttpContext context) {
int width = 440, height = 200;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.YellowGreen);
Font font = new Font("宋体", 12);
Brush brush = new SolidBrush(Color.Red);
Pen pen = new Pen(Color.Blue, 1);
g.DrawLine(pen, 40, 80, 100, 80);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
context.Response.ContentType = "image/jpg";
context.Response.BinaryWrite(ms.ToArray());
}
在页面中如果直接将img的src属性改为“Handler.ashx”就可以正常显示,可如果这样就错了:
$.ajax({
type: "post",
contentType: "application/json",
url: "Handler.ashx",
success: function (result) {
$('img').attr('src',result);
}
});
为什么?
如果我改用.asmx来返回byte[],那么在jQuery中又该用$.ajax如何使得显示图像呢? 展开
2个回答
展开全部
ajax只支持如下字符串(String)格式(dataType):
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
"script": 返回纯文本 JavaScript
代码。不会自动缓存结果。除非设置了"cache"参数。'''注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)"json": 返回 JSON 数据 。
"jsonp": JSONP
格式。使用 JSONP
形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。"text": 返回纯文本字符串
不能也必要用ajax技术显示图像。
img预加载示例:
function loadImage(url, callback) {
var img = new Image(); //创建一个Image对象,实现图片的预下载
img.src = url;
if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数
callback.call(img);
return; // 直接返回,不用再处理onload事件
}
img.onload = function () { //图片下载完毕时异步调用callback函数。
callback.call(img);//将回调函数的this替换为Image对象
};
};
2014-03-06
展开全部
contentType: "application/json"返回类型是json
js只能处理html字符串和JSON字符串
js只能处理html字符串和JSON字符串
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询