首页 新闻 会员 周边 捐助

jquery ajax 问题

0
悬赏园豆:50 [已解决问题] 解决于 2019-09-25 20:36

以博客园首页为例 , 打开博客园 , 使用 edge 控制台运行
______________________________________________
直接运行 :

$.get('https://www.cnblogs.com/following')
[object Object]: ......

点开发现这个对象并没有 responseText


添加了一个变量:

var x = $.get('https://www.cnblogs.com/following')
x.responseText
<html>.....</html>

正常得到响应
____________________________________________
如果写在一个函数里面:

function f() {var x = $.get('https://www.cnblogs.com/following');return x.responseText;}
f()
undefined

得到了一个 undefined
_______________________________________________
为何直接运行无法获取对象响应文本 , 赋值给对象则有响应文本 ?
而逐条运行可以获取响应 , 但是封装在函数里则不行呢 ?
按我的理解这里也并不存在跨域问题
... 我到底是在什么地方错误了呢 ?

问题补充:

我又在 chrome 上试了一下

$.get('/news')
[object Object]

这次返回的对象是有 responseText 的,

但是....封装函数的写法 , 或者直接选择 responseText 仍然是 undefined , 也就是以下三种写法

function f() {....} ; f();
undefined
$.get('/news')['responseText']
undefined
$.get('/news').responseText
undefined

p->p.Name的主页 p->p.Name | 初学一级 | 园豆:53
提问于:2019-09-25 17:01
< >
分享
最佳答案
1
function f() {
    var x = $.get('https://www.cnblogs.com/following');
    return x;
}
var y = f();
y.responseText;

$.get 是異步,直接return x.responseText當然會是undefined

收获园豆:50
RosonJ | 老鸟四级 |园豆:4910 | 2019-09-25 17:51

感谢指出 , 我也去查看了一下关于异步的一些资料 , 比如 callback , Promise , async/await 等, 算是有了个大概认知 , 同时也注意到 $.get 是有一个回调函数地参数的 , 但是

$.get('/news',function (d) { console.log(d) })
同样没有得到控制台对于响应的输出 , 这又是哪里错了呢 ?

p->p.Name | 园豆:53 (初学一级) | 2019-09-25 20:36

@p->p.Name:

$.get('https://q.cnblogs.com/q/120275/',function (d) { console.log(d); }, 'html');

要寫成這樣喔

RosonJ | 园豆:4910 (老鸟四级) | 2019-09-26 13:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册