“访问被拒绝。”使用JQuery .ajaxForm()在IE8上出错

时间:2011-01-29 03:17:59

标签: jquery ajax same-origin-policy

问候所有人,

我是一名AJAX新手,我在使用JQuery 1.4.4和jquery.form.js AJAX插件时遇到same origin policy保护问题。

我有一个AJAX联系表单,只要访问者用“www”输入URL,就可以正常工作。但如果他们导航到我的网站(不使用www),URL仍然可以解析,但URL与我在AJAX表单中使用的URL不匹配。在Chrome中,这会导致控制台错误:

“XMLHttpRequest无法加载http://www.example.com/。Access-Control-Allow-Origin不允许原点http://example.com。”

在IE8上,我得到“访问被拒绝”。因此,即使URL有或没有“www”解析确定,如果访问者不以“www”开头,我的AJAX表单将无效。如果我将我的AJAX表单代码更改为发布到http://example.com(没有“www”),那么如果访问者导航到www.example.com,它将无效。我想不出如何使我的代码处理任何条件。无论使用哪种JQuery,几乎每个人都会遇到使用AJAX的问题。所以我必须遗漏一些明显的东西。有人可以教我这个吗?我的测试代码如下。

谢谢,

Northk

<!DOCTYPE html> 
<html>
<head> 
<meta charset="utf-8"> 
<title>ajaxForm Error Test</title> 
<script src="http://www.example.com/js/jquery-1.4.4.min.js"></script> 
<script src="http://www.example.com/js/jquery.form.js"></script>    
</head> 
<body>
<form id="contact-form" method="post" action="http://this-url-wont-be-used.com/">
<a href="#" id="contact-button">SEND</a>
</form>
<script>
//
// hook up the form to ajax
//
$('#contact-form').ajaxForm({
    url: 'http://www.example.com/', // forcing the URL doesn't seem to help!
    success: function(data) {
        alert(data);
    },
    dataType: 'html'
});
//
// make the SEND link behave as if it's a submit button
//
$('#contact-button').click(function(e) {
  $('#contact-form').submit();
});
</script>
</body>
</html>

2 个答案:

答案 0 :(得分:2)

域名www.xyz.com和域名xyz.com不一样,如果您在Javascript文件中硬编码了网址,则会收到此错误。

简短的回答是使用相对网址而不是完整网址。你没有显示实际网址,所以我不能在你的情况下给你一个例子但是让我们说域名是 http://www.xyz.com 你需要将表格发布到网址 http://www.xyz.com/admin/form/

在你的javaScript中,你使用的url是 /管理/形式

这样,无论您的访问者使用什么网址访问您的网站,它都会有效,并且不会导致跨域脚本错误。

当然,如果您的网站是公开的,您应该(永久)将您的xyz.com网站重定向到www.xyz.com网站。因为谷歌和其他搜索引擎认为这两个域是不同的域,你的页面排名将分为两个域。

答案 1 :(得分:0)

尝试使用url url: '/',

的相对路径