请教一个 js 问题

2020-08-19 09:30:38 +08:00
 dapengzhao
$(document).ready(function () {
            $.ajax({
                url: "{% url 'func' %}?x={{ x }}&y={{ y }}",
                success: function (response) {
                    if (response.count >= 0) {
                        z = response.count;
                        alert(z) # 可以弹框
                        
                    }
                }
            });
        alert(z) # 没有反应
2881 次点击
所在节点    问与答
35 条回复
Biwood
2020-08-19 10:44:14 +08:00
回楼主的 Append 的内容:你没法直接在下面使用 z,你需要把下面的逻辑封装成函数,比如

function nextStep( count ) { ... }

然后在 success 回调里面调用 nextStep 函数,把 z 当做参数传进去即可。
dapengzhao
2020-08-19 10:48:04 +08:00
@Biwood 感谢,我试一下
sixway
2020-08-19 10:58:41 +08:00
使用未声明的变量,这样的做法并不好。

局部变量,全局并不能访问。可以提升,或者使用闭包。或者使用楼上说的
czkm1320
2020-08-19 11:12:43 +08:00
就是异步问题,不信可以 setTimeout(()=>{console.log(z)},100) 试试
azh7138m
2020-08-19 13:36:58 +08:00
这和 js 有个鸡儿关系
别的语言照样有这种异步的问题啊

自己菜不要怪语言
NasirQ
2020-08-19 14:03:23 +08:00
归根结底,请求异步啊
dapengzhao
2020-08-19 14:21:42 +08:00
@azh7138m 大佬,我也没说自己牛逼啊,这也确实是在 js 遇到的问题啊,我应该贴个 js 代码,说这个 java 问题怎么解决?还有我就是菜这我很坦然的承认,碍着大神眼了,我的锅,我的锅,大神出门左拐,慢走不送啊。。。。。。
Yumwey
2020-08-19 15:37:20 +08:00
@flowfire ... 这就是异步问题啊... 同步的话,函数内早被提升了。
xingyuc
2020-08-19 15:50:52 +08:00
你们说话就不能友好点么,戾气那么重
nmdx
2020-08-19 16:25:43 +08:00
这可能是一个新手经常懵逼的地方。。想当年因为这个问题才弄懂了什么叫异步😄
anerinck
2020-08-19 16:25:53 +08:00
@azh7138m 似乎楼主也没有怪语言吧。。。
azcvcza
2020-08-19 16:35:21 +08:00
不明白的地方都打上 log 呗
netnr
2020-08-19 16:44:34 +08:00
方式一:回调,把 ajax 请求封装成回调函数,后面的脚本写在回调函数里面,当然 ajax 返回的值可以做缓存
方式二:Promise,同上,写法不一样,优雅一些
sunwang
2020-08-19 17:39:48 +08:00
没有反应是因为你使用了一个没有定义的变量,js 报错不执行了。
关于你想在下面使用使用,建议你写在函数里,在 success 成功回调里去传入 z 参数执行函数。
TomVista
2020-08-20 09:34:29 +08:00
jq 的话,就无限套 callback

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/699501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX