我正在编写一个脚本,使用jQuery加载一些图像异步。
以下是加载图片的函数的代码片段 -
try{
for(img in imgsArray){
$.ajax({
async: false,
type: "get",
url:imgsArray[img],
success:function(imgFile){
alert("success");
//do something useful
},
error:function(XMLHttpRequest,status,error){
//do nothing
}
});//ajax
}
}
catch(e){
//oops
}
我已经在Firefox,Webkit(Safari,Chrome)中对此进行了测试,但它确实有效。
图像位于服务器上的文件夹中,我正在使用jQuery 1.3。
任何想法?
答案 0 :(得分:17)
此问题的一个简单修复是提供jQuery设置dataType : 'text'
或dataType : 'xml'
或dataType : 'json'
或任何其他可用的响应类型。
我遇到了同样的问题,但在.ajax调用中指定了dataType设置后,它工作正常。
IE实际上不是智能浏览器,它不会采用默认值字符串。
试试吧......祝你好运。
答案 1 :(得分:11)
尝试将cached-option设置为false。
$.ajax({
async: false,
cache: false,
type: "get",
url:imgsArray[img],
success:function(imgFile){
alert("success");
//do something useful
},
error:function(XMLHttpRequest,status,error){
//do nothing
}
});//ajax
答案 2 :(得分:7)
我遇到了类似的问题 - 如果IE无法将响应解析为xml,IE似乎会触发失败,即使请求成功,所以如果您要请求图像,例如,它会返回错误块中的xhr.status为200。
我在FF的成功模块中以及在“if(xhr.status == 200)”条件中包含的错误块中保留了我的“成功”功能。
答案 3 :(得分:4)
使用以下标记来支持跨浏览器
$ .support.cors = true;
答案 4 :(得分:1)
过去几天我使用JSONP Web Service遇到过与IE和AJAX类似的问题。即使是代码中最小的错误也可能导致IE中的所有内容中断。
可能最好的办法是使用Visual Web Developer Express或Visual Studio在IE中调试页面。以下是如何操作的教程:
How to debug JavaScript with Visual Web Developer Express
按照说明操作,并在AJAX请求开始时设置断点。
尝试这些事情:
希望你尽快开始工作!
答案 5 :(得分:1)
最后,我必须为IE浏览器创建一个单独的功能。
目标是测试某个位置的图像,使代码看起来像 -
//get the images from the array
for(img in imgsArray){
if($.browser.msie){
/* DOM manipulation method */
//IE has problems with ajax so try this instead
//create a new image object with unique ID
var testImg = $("<img/>");
var imgID = "imgID"+img;
//hide it..
testImg .css({ "visibility":"hidden" });
testImg .attr("src",imgsArray[img]);
testImg .attr("id",imgID);
//.. and insert it into the DOM or else test will always fail
//because it does not exist as far as browser is concerned
$("body").append(testImg );
//test for image
if(document.getElementById(imgID).width > 60){
//do something useful
}
}
这不是我的问题的答案,但它是一个功能性的工作。
答案 6 :(得分:1)
在.ajax配置中设置'cache:false'对我有效:)
答案 7 :(得分:0)
我建议使用Charles Proxy来查看正在发生的事情 - 即请求是否已经发出?有什么回应?
另外,我认为可能会抛出一些Exception,那么为什么不在Catch部分添加一些警报以查看会发生什么?
答案 8 :(得分:0)
如果你成功了:
Success: function (data) {
if (data != null) {
alert(data);
;
}
},
为此改变:
success: function (data, textStatus, XMLHttpRequest) {
alert(data.d);
}
答案 9 :(得分:0)
你可以尝试的另一件事,就像John Saunders的解决方案一样,是尝试&#34; jsonp&#34;作为内容类型,而不是json - 用于json数据类型的预期响应。我不得不尝试使用IE来让我的bug消失,这是除IE之外的其他浏览器中的普通代码。
这是我的代码:
$.ajax({
url: request_url,
data: { var1: 'stuff' },
dataType: "jsonp",
type: "get",
async: true,
cache: false,
success: function(collections) {
// handle result
}
});
干杯。
答案 10 :(得分:0)
我遇到类似问题的问题。以上答案解决了我的许多问题。但是,还有一个我需要做的伎俩。不要使用
$.ajax({...,
success: myfunc,...});
使用
$.ajax({...,
success: myfunc(),...});
答案 11 :(得分:0)
也许编码有问题。 试试这个
$.ajax({
type: 'GET',
url: encodeURI(url ),
dataType: 'text',
success: function (data) {
result = JSON.parse(JSON.parse(data))
}
});
答案 12 :(得分:-1)
如果您使用输入检查,如果您有一个选择为“已选择”,如果您不这样做,即不将此参数传递给ajax函数。