我有一个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确实有效。
对此的任何帮助将不胜感激。谢谢
答案 0 :(得分:2)
由于浏览器安全限制, 大多数“Ajax”请求都受制于 同源政策;请求 无法成功检索数据 来自不同的域,子域或 协议
答案 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来最小化样板代码。看了几十篇文章后终于搞清楚了。这是我的总结。
这是一个带有一些调试系统的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)
有几件事:
针对此跨域问题的几种解决方案: