使用ajax jquery读取跨域内容

时间:2015-12-09 15:24:17

标签: php jquery ajax cross-domain

我想从跨域读取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>

任何帮助将不胜感激,

1 个答案:

答案 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"