为什么这在IE中失败了?

时间:2011-01-27 06:22:28

标签: javascript jquery html ajax json

我的网站在IE中失败了。我只能访问Mac,所以很难测试,并且相似之处就是meh。我已经能够检查一次或两次,所以我知道它在搜索youtube时失败了。

关闭弹出窗口>命中2010>命中10/20>打我的灵魂>错误

http://www.phishvid.com/

有人能提供一些见解吗?这是失败的代码:

谢谢!

2 个答案:

答案 0 :(得分:4)

您正在尝试向另一个域发出AJAX请求,该域受Same Origin Policy限制。

为了解决这个问题,请使用JSONP,使您的请求使用JSONP callback=?到您请求的网址,这将帮助您克服跨网域障碍。

您更新的网址应该是

 $.getJSON("http://gdata.youtube.com/feeds/api/videos?callback=?&max-results=5&alt=json&q=phish " + song + " " + month2 + " " + day + " " + year, function (data) {
   //your callback code
 }

Example

答案 1 :(得分:0)

我的IE在第138行的jquery-1.4.4.min.js中报告“访问被拒绝”,char 355在您的网站上显示如下:

if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}

实际字符编号355是第一个b,所以我猜你可能遇到过jQuery 1.4.4中的错误?您可以尝试使用以前的版本(除非您使用某些1.4.4特定功能)或将.min.js文件替换为完整的jquery文件,将调试器语句插入此位置的jquery文件中(之前它抛出异常)并尝试调试以找出错误。例如,您可以使用Microsoft Visual Web开发人员进行调试,或者如果在IE9中出现相同的问题,它也有内置的.js - 调试器

编辑:在看到你发布的完整jQuery代码之后,显然问题是jQuery在这种情况下正在尝试标准的ajax调用,而不是JSONP。 (标准的ajax只允许返回服务于javascript的服务器)