未经测试的代码
$.ajax({
// target url/service
url : '/service/images?id=1',
dataType : 'json',
beforeSend : function(xhr) {
// there are still other ways to do it.. i prefer crypto.js
var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password);
var base64 = Crypto.util.bytesToBase64(bytes);
xhr.setRequestHeader("Authorization", "Basic " + base64);
},
error : function(xhr, ajaxOptions, thrownError) {
// reset or whatever
onError('Invalid Credentials');
},
success : function(model) {
// fetch the image..
...
}
});
在客户机侧上的想法是制定在beforeSend回调在auth头请求。
作为每RFC 1945中,auth头值应包含的用户名:密码作为编码(BASE64)串,这将导致类似下面的标头:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
为base64编码得到crypto-js一试。
保重使用SSL ..用户名:passwort可以轻松解码...
----- -----编辑
成功后触发的事件,我会试试这个:
success : function(model) {
// fetch the image..
var img = $("<img />").attr('src', 'http://somedomain.com/image.jpg').load(function() {
if (!this.complete
|| typeof this.naturalWidth == "undefined"
|| this.naturalWidth == 0) {
alert('broken image!');
} else {
$("#something").append(img);
}
});
}
这可能是工作,因为你是在服务仍然authed ..
futhermore你有此选项:
var url = 'IMAGE_URL';
$.ajax({
url : url,
cache: true,
processData : false,
beforeSend : function(xhr) {
// there are still other ways to do it.. i prefer crypto.js
var bytes = Crypto.charenc.Binary.stringToBytes(username + ":" + password);
var base64 = Crypto.util.bytesToBase64(bytes);
xhr.setRequestHeader("Authorization", "Basic " + base64);
},
}).always(function(){
$("#IMAGE_ID").attr("src", url).fadeIn();
});
这将提供一个很好的图像淡入,但可能有性能故障,并依赖于使用缓存的假设..
另一种选择是使用base64编码字符串..但你可能要延长你的后端/休息 - 服务功能来做到这一点。
$.ajax({
url : 'BASE64_IMAGE_REST_URL',
processData : false,
}).always(function(b64data){
$("#IMAGE_ID").attr("src", "data:image/png;base64,"+b64data);
});
ajax返回值是您的base64编码图像!所以它看起来像这样:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhE..."/>
你可以试试这个企图的成功方法或与beforeSend()联合..但我从来没有真正使用之前..所以.. :)
kindly
请添加一些代码来显示你有什么到目前为止已经试过。 – MattC
贵的服务回报图像的URL或直接的形象? – Sachin
我已经编辑了问题补充更多细节。 –