【问题标题】:Why is this failing in IE?为什么这在 IE 中失败了?
【发布时间】:2011-06-16 08:22:03
【问题描述】:

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

关闭弹出窗口 > Hit 2010 > Hit 10/20 > Hit My Soul > Error

http://www.phishvid.com/

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

谢谢!

【问题讨论】:

  • 哪个版本的IE?涉及 JS 的事情经常在 IE
  • 我相信他们所有人。我真的无法很好地测试它。你认为你可以很快检查吗?谢谢。
  • 这是一个跨站脚本问题,IE 很可能阻塞了 ajax/json 请求。看看这个:stackoverflow.com/questions/3038862/…
  • 老实说,我已经尝试了 jsonp 50 次并花了几个小时,但永远无法让它与 youtube 一起使用(至少检索 youtube 链接/id)。你觉得你能告诉我它是如何工作的吗?
  • 我不经常出于愚蠢的原因投赞成票,而是为网络钓鱼 +1

标签: javascript jquery html ajax json


【解决方案1】:

您正尝试向其他域发出 AJAX 请求,该域受 Same Origin Policy 限制。

为了克服这个使用 JSONP,让你的请求使用 JSONP callback=? 到你请求的 url,这将帮助你克服跨域障碍。

你更新后的网址应该是这样的

 $.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

【讨论】:

【解决方案2】:

我的 IE 在第 138 行的 jquery-1.4.4.min.js 中报告“访问被拒绝”,字符 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 的服务器)

【讨论】:

  • 你能在这里检查一下吗? phishvid.com/index2.html 那是开发版。
  • 您看到“xhr.open”行(jquery.js 中的第 5910 行)这意味着 jQuery 正在执行标准的 ajax 调用(不是 jsonp),这在同源策略下是不允许的。您可以做的是对 Web 服务或页面或您自己的服务器上的任何内容进行 ajax 调用,让服务器执行 http 请求以从 youtube 获取内容,然后将其发送回客户端
猜你喜欢
  • 2019-10-24
  • 2011-08-08
  • 1970-01-01
  • 2017-07-13
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多