在进行跨域ajax请求时出现此错误。
错误:网络错误:DOM异常19
请帮忙。卡在真正的坏:(
我在Chrome中使用同步请求时遇到了这个错误:
var req = new XMLHttpRequest();
req.open("GET", url, false) // false denotes synchronous call
req.send();
异步执行(我无论如何都想这样做)并没有给我带来错误。
然后我发现服务器重写了URL。如果我使用了重写后的URL,我就没有得到错误。可能是Chrome的错误,因为Safari可以很好地处理同步的、未重写的情况。
不知道我是否会报告它,因为同步XMLHttpRequest无论如何都不受欢迎。
一个常见的错误是在需要http连接的服务器上发送https请求。
为了让跨域AJAX调用正常工作,我在服务器上使用了PHP。。。
getRemoteUrl.php
<?php
if (preg_match("/^[();[]{}]+$/", $_GET['url'])) {
//Something bad
} else {
$ctx = stream_context_create(array('http' => array('timeout' => 10)));
if (!(@$contents = file_get_contents($_GET['url'], 0, $ctx))) {
//fail
} else {
//success
echo $contents;
}
}
?>
然后调用PHP文件并使用输出,就像直接调用网站一样。
function GetXmlHttpObject() {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
return null;
}
}
var xmlhttp = GetXmlHttpObject();
if (xmlhttp === null) {
//Your browser does not support XMLHTTP!
} else {
xmlhttp.open("GET", "getRemoteUrl.php" + "?url=someRemoteUrl", false);
xmlhttp.send();
var webpage = xmlhttp.responseText;
//do something with webpage
}
我建议使用异步;为了简洁起见,我使用了同步。如果PHP不是首选或不可用的,则可以使用其他服务器端语言来完成此操作。
DOM异常19指的是"网络错误"。您在Ajax调用中联系的URL可用吗?
如果服务器支持,则可以进行跨域请求!在进行实际的GET/POST调用之前,浏览器会向服务器发出OPTIONS调用,以检查它是否支持跨域请求。检查您正在联系的服务器是否支持跨域请求。有关跨域请求的更多详细信息,请参阅这篇非常有用的文章:使用CORS
为了避免服务器的跨域策略,您可以使用Korz,只需添加
<script src="//tomodo-tools.s3.amazonaws.com/tomodo.korz-0.5.js"></script>
到您的<head>
,所有跨域请求都将通过tomodo.me路由,因此它们的Access-Control-Allow-Origin header
为"*"。