跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一个 js 问题
未分類
1 9 月 2020

请教一个 js 问题

请教一个 js 问题

資深大佬 : dapengzhao 27

$(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) # 没有反应 

大佬有話說 (35)

  • 資深大佬 : toma77

    Uncaught ReferenceError: z is not defined

  • 資深大佬 : kop1989

    js 当你给某个变量赋值时,如果这个变量没声明过,会进行声明。
    但是你最下面的 alert(z),这个 z 还未进行过任何声明 /赋值。必然是抛异常的。

  • 資深大佬 : masker

    多扎实基础吧。 作用域

  • 資深大佬 : TomVista

    alert(z) 时$.ajax 还没运行

  • 資深大佬 : Yumwey

    执行上下文中,z 尚未声明,ajax 异步了。

  • 資深大佬 : sevenzhou1218

    php 程序员经常干这事….

  • 資深大佬 : AngryPanda

    @sevenzhou1218 我都懒得骂你

  • 資深大佬 : masker

    @sevenzhou1218 蠢比?

  • 資深大佬 : flowfire

    @TomVista
    @Yumwey
    跟异步没关系,js 里新声明的变量作用域是函数级,出了函数就访问不到( let 是块级,出了大括号就访问不到)
    即使这里是个 IIFE 也会报错

  • 資深大佬 : flowfire

    @flowfire 补充一下 ,let const 都是块级作用域。

  • 資深大佬 : sevenzhou1218

    @AngryPanda
    @masker
    早上没刷牙吗? 还是戳到你的痛点了? 我遇到的 php 程序员本来就经常干这事。

  • 資深大佬 : toma77

    @flowfire 这里就是异步的问题,z = response.count 这种不加 var/const/let 声明的是全局变量

  • 資深大佬 : AngryPanda

    @sevenzhou1218

    我来告诉你原因 —— 因为你只能和这样水平的人在一起工作。

  • 資深大佬 : qiayue

    @sevenzhou1218 你遇到的 PHP 程序员都干这事,你的反思反思,为什么会与这样的 PHP 程序员为伍 3

  • 資深大佬 : flowfire

    @toma77 我的错。。。。。严格模式习惯了。。。不带 var let const 会报错

  • 資深大佬 : Biwood

    https://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

    阮一峰老师这篇博客很好的解释了 JavaScript 里面同步和异步的区别,建议认真看看。对于新手来说,这块确实不好理解,大家都是这么一步步走过来的。

  • 資深大佬 : masker

    @sevenzhou1218 都不是。 单纯觉得你的发言蠢。

  • 資深大佬 : sevenzhou1218

    @AngryPanda
    @qiayue
    确实啊,我自己就是 php 出身啊,我也从没说过自己牛逼啊。我只是说 php 程序员经常干这事而已。

  • 資深大佬 : sevenzhou1218

    @qiayue
    @AngryPanda
    @masker
    相互拉黑吧,不想跟你们扯了。

  • 資深大佬 : AngryPanda

    @sevenzhou1218 你这种人需要拉黑?我就喜欢看你上蹿下跳。

  • 資深大佬 : Biwood

    回主的 Append 的内容:你没法直接在下面使用 z,你需要把下面的逻辑封装成函数,比如

    function nextStep( count ) { … }

    然后在 success 回调里面调用 nextStep 函数,把 z 当做参数传进去即可。

  • 主 資深大佬 : dapengzhao

    @Biwood 感谢,我试一下

  • 資深大佬 : sixway

    使用未声明的变量,这样的做法并不好。

    局部变量,全局并不能访问。可以提升,或者使用闭包。或者使用上说的

  • 資深大佬 : czkm1320

    就是异步问题,不信可以 setTimeout(()=>{console.log(z)},100) 试试

  • 資深大佬 : azh7138m

    这和 js 有个鸡儿关系
    别的语言照样有这种异步的问题啊

    自己菜不要怪语言

  • 資深大佬 : NasirQ

    归根结底,请求异步啊

  • 主 資深大佬 : dapengzhao

    @azh7138m 大佬,我也没说自己牛逼啊,这也确实是在 js 遇到的问题啊,我应该贴个 js 代码,说这个 java 问题怎么解决?还有我就是菜这我很坦然的承认,碍着大神眼了,我的锅,我的锅,大神出门左拐,慢走不送啊。。。。。。

  • 資深大佬 : Yumwey

    @flowfire … 这就是异步问题啊… 同步的话,函数内早被提升了。

  • 資深大佬 : xingyuc

    你们说话就不能友好点么,戾气那么重

  • 資深大佬 : nmdx

    这可能是一个新手经常懵逼的地方。。想当年因为这个问题才弄懂了什么叫异步

  • 資深大佬 : anerinck

    @azh7138m 似乎主也没有怪语言吧。。。

  • 資深大佬 : azcvcza

    不明白的地方都打上 log 呗

  • 資深大佬 : netnr

    方式一:回调,把 ajax 请求封装成回调函数,后面的脚本写在回调函数里面,当然 ajax 返回的值可以做缓存
    方式二:Promise,同上,写法不一样,优雅一些

  • 資深大佬 : sunwang

    没有反应是因为你使用了一个没有定义的变量,js 报错不执行了。
    关于你想在下面使用使用,建议你写在函数里,在 success 成功回调里去传入 z 参数执行函数。

  • 資深大佬 : TomVista

    jq 的话,就无限套 callback

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具