我想从跨域读取div内容。例如,我想从以下URL加载内容:
https://msdn.microsoft.com/en-us/library/bb727098.aspx
此页面中有div ID =" mainBody" 。我已经尝试了以下代码,但它在div中仅返回200次成功,而在firefox控制台中显示错误:
SyntaxError: expected expression, got '<'
<!DOCTYPE html>
我正在尝试的代码如下:
<script language="javascript" type="text/javascript">
$(document).ready(function(e) {
$("#d").html('Loading wait...');
$.ajax({
url:"https://msdn.microsoft.com/en-us/library/bb727098.aspx#mainBody",
type:"POST",
headers:{'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
async:true,
crossDomain:true,
dataType:"jsonp",
success: function(txt){
$("#d").text(txt);
},
error: function(xhr){
$("#d").html(xhr.status+" "+xhr.statusText);
}
});
});
</script>
<div id="d"></div>
任何帮助将不胜感激,
答案 0 :(得分:1)
你得到的输出是不 "jsonp"
,正如你给出的dataType: "jsonp"
,浏览器希望它是JavaScript,并发现它始于:
<!DOCTYPE html>
在JavaScript <
中作为起始字符是语法错误。您需要删除以下行:
dataType: "jsonp"
这种与外部域通信的方式只有那些允许您从其网站获取JSONp
的方式才有可能。
主要原因是,浏览器收到响应后,尝试将其作为JavaScript执行,这使得所有后续脚本都失败了。
您需要使用像代理PHP文件一样的服务器端脚本,它会读取内容并正确执行。
Proxy.php
:
<?php
header("Content-type: application/json");
die(file_get_contents($_GET["url"]));
?>
并称之为:
url: "proxy.php?url=https://msdn.microsoft.com/en-us/library/bb727098.aspx"