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

时间:2011-05-23 19:08:34

标签: javascript jquery ajax

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

这在Firefox和Chrome中完美运行。但是在IE中,ajax调用没有通过,返回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确实有效。

对此的任何帮助将不胜感激。谢谢

7 个答案:

答案 0 :(得分:2)

来自jQuery documentation

  

由于浏览器安全限制,   大多数“Ajax”请求都受制于   同源政策;请求   无法成功检索数据   来自不同的域,子域或   协议

Same Origin Policy on Wiki

答案 1 :(得分:1)

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

此规则的主要例外是如果使用jsonp(json with padding)进行ajax调用。您可以使用jQuery here's how执行此操作。查看dataType选项。

答案 2 :(得分:1)

(这是我另一个类似答案的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或其他任何内容

这是一个带有一些调试系统的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);
    }
});

答案 3 :(得分:0)

答案 4 :(得分:0)

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

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

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

然后ajax调用save_cross_domain.php

答案 5 :(得分:0)

你应该添加一个

callback=?

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

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

希望它有所帮助!

答案 6 :(得分:0)

有几件事:

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

针对此跨域问题的几种解决方案:

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