JSONP跨域时,服务端不设置回调函数,而是直接返回json数据。但怎样用JS获得chrome后台network的数据?

我要跨域获得服务端json数据,但服务端代码不可变。

服务端代码:

<?php  
header('Content-Type:text/html;Charset=utf-8');  
$arr = array(  
    "user" => $_GET['loginuser'],  
    "pass" => $_GET['loginpass'],  
    "name" => 'response' 
);  
echo json_encode($arr);    
?> 

客户端代码:

var script = document.createElement("script");
script.src = "https://www.xxx.com/TEST.php?loginuser=lee&loginpass=123456";
document.body.appendChild(script);

这时chrome network打印出了json数据,但是怎么获取这些json数据呢?注意:不允许在php中拼回调函数!
clipboard.png

阅读 6.1k
4 个回答

想要跨域获取数据,又不修改服务器的话,不可行。

否则,就可以跨域取任何网站的资源了。

不用jsonp,用Access-Control-Allow-Origin,
服务端不变是不行的

PS: sorry 没有看到跨域两个字

如果不允许在php中拼jsonp回调

尝试在服务端把json写入script标签

<script id="data" type="application/json"><?php include('youjson.php'); ?>
</script>

客户端用以下方法获取
<script>
var jsonData = JSON.parse(document.getElementById('data').textContent)
</script>

JSONP跨域时,服务端不设置回调函数,而是直接返回json数据。

个人感觉,如果用jsonp,还是后台拼接函数比较靠谱。

否则还不如直接配置 Access-Control-Allow-Origin源,给一个白名单来的实在。

另外还存在一种不同的方案,比如:php中拼接处一个变量来,返回。但是也涉及到了内容拼接

echo 'var ResponseJsonData = '.json_encode($arr).';';   
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题