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

&引用;访问被拒绝。”;使用JQuery.ajaxForm()在IE8上出错,jquery,ajax,same-origin-policy,Jquery,Ajax,Same Origin Policy,大家好, 我是AJAX新手,在使用JQuery 1.4.4和JQuery.form.js AJAX插件进行保护时遇到了问题 我有一个AJAX联系人表单,只要访问者在URL前面输入“www”,它就可以正常工作。但是如果他们导航到我的站点(不使用www),URL仍然可以解析,但是URL与我在AJAX表单中使用的不匹配。在Chrome中,这会导致控制台错误: “无法加载XMLHttpRequest。访问控制不允许源站允许源站。” 在IE8上,我得到“访问被拒绝”。因此,即使URL的解析可以使用或不使用

大家好,

我是AJAX新手,在使用JQuery 1.4.4和JQuery.form.js AJAX插件进行保护时遇到了问题

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

“无法加载XMLHttpRequest。访问控制不允许源站允许源站。”

在IE8上,我得到“访问被拒绝”。因此,即使URL的解析可以使用或不使用“www”,但如果访问者不使用“www”作为前言,我的AJAX表单也不会工作。如果我将我的AJAX表单代码更改为post to(不带“www”),那么如果访问者导航到www.example.com,它将不起作用。我想不出如何让我的代码处理这两种情况。无论使用JQuery,几乎所有使用AJAX的人都会遇到这个问题。所以我肯定错过了一些明显的东西。有人能教我这个吗?我的测试代码如下

谢谢

诺斯克

<!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>

ajaxForm错误测试
//
//将表单连接到ajax
//
$(“#联系方式”).ajaxForm({
网址:'http://www.example.com/“,//强制使用URL似乎没有帮助!
成功:功能(数据){
警报(数据);
},
数据类型:“html”
});
//
//使发送链接的行为如同提交按钮一样
//
$(“#联系人按钮”)。单击(功能(e){
$(“#联系方式”).submit();
});

尝试使用url的相对路径
url:“/”,

域www.xyz.com和域xyz.com不相同,因此如果在Javascript文件中硬编码url,则会出现此错误

简单的回答是不要使用相对URL而不是完整URL。你没有显示实际的URL,所以我不能在你的情况下给你一个exmaple,但让我们假设该域是 您需要将表单发布到url

在javaScript中,您要使用的url是 /管理员/表格

这样,无论访问者使用什么url访问您的站点,它都会工作,并且不会导致跨域脚本错误


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

我认为发生的事情是浏览器将WWW视为一个不同的域,因此它不允许跨域请求尝试使用建议的相对路径。另一个选项是使用JavaScript检索基本URL并使用ThathShiv设置Ajax请求。根据您的建议,我决定在.htaccess中设置重定向,以便www.example.com和example.com(无www)始终解析为www.example.com。太棒了!谢谢你的帮助。@NorthK,很高兴能帮上忙!您仍然应该使用相对URL作为实践。这被认为是“最佳实践”,如果您将来需要更改内容,或者说相同的代码正在用于不同的域等,它可以使迁移变得更容易。