我很确定这是一个安全问题阻止我这样做,但我想知道是否有一个我不知道的解决方法......
我有一个脚本将用户的电子邮件注入我的客户端的联系人数据库,它在IE浏览器中轰炸,但在FF,Chrome中工作(像往常一样)。只是想知道我是否可以将服务器添加到信任或其他东西以使其工作?
<script type="text/javascript">
window.onload = init;
//Global XMLHTTP Request object
var XmlHttp;
function CreateXmlHttp() {
//Creating object of XMLHTTP in IE
try {
XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (ex) {
XmlHttp = null;
}
}
//Creating object of XMLHTTP in Mozilla and Safari
if (!XmlHttp && typeof XMLHttpRequest != "undefined") {
XmlHttp = new XMLHttpRequest();
}
}
function init() {
var x = document.getElementsByName("btnContinue");
x[0].onclick = submitForm;
}
function submitForm() {
var x = document.getElementsByName('Email');
if (x[0].value.length > 0) {
CreateXmlHttp();
XmlHttp.open("POST", "https://app.icontact.com/icp/signup.php", false);
XmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XmlHttp.send("redirect='http://www.xyz.com/articles.asp?ID=97'&errorredirect='http://www.xyz.com/articles.asp?ID=256'&fields_email=" +
x[0].value + "&listid=123&specialid:123=YP7I&clientid=123&formid=123&reallistid=1&doubleopt=0&Submit=Submit");
}
}
</script>
我很感激任何见解。
谢谢!
答案 0 :(得分:0)
我的第一个建议是尝试在 ActiveX对象之前创建XMLHttpRequest
。 IE7及以上DO支持AJAX,就像其他浏览器一样。
接下来,您应该使用open()
方法中的相对路径。虽然我认为形成你的问题,但是需要能够在任何网站上运行吗?在这种情况下,我建议使用“旧”方法创建表单和iframe。
答案 1 :(得分:0)
这是同源政策问题。可以设置允许访问内容标题,但IE ActiveXObject不会使用它们。 XMLHttpRequests遵循标题,并且可以在支持它们的浏览器上运行。
看到这个问题: AJAX Permission Denied On IE?
虽然看起来他们找不到兼容IE的跨域POST的解决方案......
如果您可以通过Web服务器代理(向服务器发布POST),并让服务器进行POST,那么问题就解决了。
答案 2 :(得分:0)
在新浏览器上,如果您在请求的页面上有特殊的HTTP标头,则可以使用跨域XHR。 http://ejohn.org/blog/cross-site-xmlhttprequest/
或者您可以使用动态脚本加载。