JQuery外部Ajax调用无法在IE中运行

我有一个ajax脚本,可以将一些数据发送到外部URL。 外部URL托管在同一服务器上,但该域与ajax调用的源不同。

这在Firefox和Chrome中完美运行。 但是在IE中ajax调用没有通过,并且Return False函数不起作用(一旦ajax调用失败)。

以下是我的代码:

$.get('http://myexternaldomian.com/feedback/save.php', { answer: $('#answer').val(), page_url: pathname }); // Keeps the user on the page return false; 

当我尝试从ajax url中删除http://时,返回false确实有效。

任何有关这方面的帮助将不胜感激。 谢谢

我很惊讶他们中的任何人都在工作。 浏览器通常不允许对当前页面来源之外的域进行ajax调用。

此规则的主要例外是如果使用jsonp(json with padding)进行ajax调用。 你可以用jQuery做到这一点, 这是怎么做的 。 查看dataType选项。

来自jQuery文档

由于浏览器安全限制,大多数“Ajax”请求都遵循相同的原始策略; 请求无法成功从其他域,子域或协议中检索数据。

Wiki上的同源策略

(这是我另一个类似答案的copypaste)。 你可以尝试启用“jQuery.support.cors = true”标志,看看它是怎么回事。 我使用jQuery v1.7.2。

我不得不从本地磁盘“file:/// C:/test/htmlpage.html”加载网页,调用“http://localhost/getxml.php”url,并在IE8 +和Firefox12 +浏览器中执行此操作,使用jQuery v1 .7.2 lib最小化样板代码。 看了几十篇文章后终于搞清楚了。 这是我的总结。

  • 服务器脚本(.php,.jsp,…)必须返回http响应头Access-Control-Allow-Origin:*
  • 在使用jQuery之前,ajax在javascript中设置了这个标志:jQuery.support.cors = true;
  • 你可以在使用jQuery ajax函数之前设置一次或每次标记
  • 现在我可以在IE和Firefox中阅读.xml文档了。 其他浏览器我没有测试。
  • 响应文档可以是plain / text,xml,json或其他任何内容

这是一个带有一些调试sysout的jQuery ajax调用示例。

 jQuery.support.cors = true; $.ajax({ url: "http://localhost/getxml.php", data: { "id":"doc1", "rows":"100" }, type: "GET", timeout: 30000, dataType: "text", // "xml", "json" success: function(data) { // show text reply as-is (debug) alert(data); // show xml field values (debug) //alert( $(data).find("title").text() ); // loop JSON array (debug) //var str=""; //$.each(data.items, function(i,item) { // str += item.title + "\n"; //}); //alert(str); }, error: function(jqXHR, textStatus, ex) { alert(textStatus + "," + ex + "," + jqXHR.responseText); } }); 

我不认为它应该适用于Chrome或Firefox,除非您在localhost或类似的东西上进行测试,这将违反跨域策略。

你需要的是在同一个域内代理它,使用php连接到你需要的目的地,并从同一个域调用url。

save_cross_domain.php – >通过服务器连接到所需的URL

然后ajax调用save_cross_domain.php

你应该添加一个

 callback=? 

到您的URL并在服务器端处理此问题。

我为java servlet做了一次,当包含回调参数时,我在json响应周围添加了一对额外的parenteses。

希望能帮助到你!

有几件事:

  • 这个问题的答案/对话有点脱离背景。 实际上从问题来看,更隐含的是如何在IE中进行ajax调用。 [Atleast修改问题标题,否则问题非常本地化]

这个跨域问题的几个解决方案:

  1. CORS [IE7后兼容]
  2. JSONP [这里实际上浏览器接受输入认为它是一个脚本]
  3. 服务器端编码