iT邦幫忙

0

jquery 寫網頁問題,已經宣告過的 function 仍有機率會 defined ?

先不說為什麼用 jquery。

想問問我的放法是

<html>
...
<body>

    <script src="...jquery.min.js"></script>
    <script src="functions.js"></script>
    <script src="use.js"></script>
    ...
</body>
</html>

補充~

functions.js

function getW(data) {
    $.ajax(`xxx`, {
        type: 'get',
        data: data,
        success(data) {
            return data
        },
        error(xhr) {
            console.log(xhr)
        }
    })
}

use.js

let data = {
    id: id
}
getW(data)

在 jquery.min 之後都是我寫的 js function 或是變數宣告
很怪的是
有機率會出現 「Uncaught ReferenceError: getW is not defined」的錯誤!
但重整之後就好了
十次可能會發生三次這種事
我是分了很多的檔案(但是都無關緊要)
有些檔案會有變數宣告
然後讓下面(其他js檔) function 使用
又或是上面會先宣告 function
在下面(其他js檔)使用該 function
我確定的一點是「都是有宣告」才會使用,所以不該有 defined 的問題!

出現這種事情的機率十次有三次左右
我不是很懂是怎麼回事⋯⋯
這樣確實滿傷腦筋的


補充

不過我重整是直接清 cache 方式⋯⋯ (谷歌瀏覽器)不曉得會不會是這個問題QQ

本身 ajax 打的後端路徑沒有問題,也絕對會回東西

看更多先前的討論...收起先前的討論...
咖咖拉 iT邦研究生 5 級 ‧ 2020-10-26 15:59:40 檢舉
is not defined
看是指向 哪個變數 函數

跟寫法有關 不是jquery問題
先不說內文如何,你應該是要問「有機率會 is not defined」吧...
通靈亡 iT邦研究生 4 級 ‧ 2020-10-26 16:05:51 檢舉
你有程式碼都看不出來問題了
你覺得別人沒看到程式碼,看得出問題嗎...?

修正一下你發問的方式吧...
預設問題立場,不是一個很好的發問和偵錯方式
就跟你上篇預設問題是Click事件一樣
別人看了也滿傷腦筋的
松松 iT邦研究生 2 級 ‧ 2020-10-26 16:22:10 檢舉
咖咖拉:我也在想是不是跟擺放的位子有關係,但 defined 的那個 function 確實在上面有先引入
function有沒有問題?
分享之前遇到的問題
功能需求是按下按鈕觸發function再打開dialog
function也是發生is not defined
後來找了一下才發現是dialog 的 buttons沒用引號括起來,中間還多了空格
is not defined的情況很多,還是需要提供code、完整的錯誤訊息才方便判斷
松松 iT邦研究生 2 級 ‧ 2020-10-26 16:30:49 檢舉
archer9080:該 function 有做一件事情就是打 ajax,然後返回值。

```
function getW(data) {
$.ajax(`xxx`, {
type: 'get',
data: data,
success(data) {
return data
},
error(xhr) {
console.log(xhr)
}
})
}
```
松松 iT邦研究生 2 級 ‧ 2020-10-26 16:32:53 檢舉
我有用谷歌的 network 看了一下,確實是有先引入該 function
松松 iT邦研究生 2 級 ‧ 2020-10-26 16:34:16 檢舉
還是說必須都要先 $(function() { }) 呢?我查了一下是說在 head 引入 jquery 時才需要 $(function() { }) ,如果是在 body 裡面就不用。這是對的嗎?
通靈亡 iT邦研究生 4 級 ‧ 2020-10-26 16:39:58 檢舉
不給Source Code 和實際的錯誤訊息,一直自以為的假設問題要別人通靈
別人好心通靈,還按人家沒有幫助

我直接說吧,你這樣提問沒有人想幫你。
柯柯 iT邦新手 5 級 ‧ 2020-10-26 16:58:51 檢舉
第一 $(function() { }) 不是引入jquery 才需要 是因為 $ 是用jquery的選擇器
所以需要引用jquery 他才看得懂 $(function() { })

第二 $(function() { }) 這個的用意 是為了 要網頁加載完成 全部的物件都順利產生後
才去執行你JS或Jquery的任何動作 跟有沒有放在body裡面是完全沒關係的
才不會造成你上一個問題 為什麼 某個元件沒辦法執行要增加class的動作

第三 你只給
<html>
<body>
<script src="...jquery.min.js"></script>
</body>
</html>
這樣 那我問你
我除錯器顯示 Uncaught TypeError: Cannot read property xxx of null
你說 你能找出問題嗎?(上面錯誤訊息隨便亂抓一行出來貼的)

所以問問題 把錯誤訊息跟完整的碼貼出來吧 畢竟這樣比較好找出問題
另外你的Uncaught ReferenceError: xxx is not defined
xxx是甚麼 getW ?
松松 iT邦研究生 2 級 ‧ 2020-10-26 17:07:41 檢舉
柯柯:已補充,原汁原味的是長這樣子。getW 只有在 use.js 使用。
松松 iT邦研究生 2 級 ‧ 2020-10-26 17:13:16 檢舉
柯柯:另外我知道你說的第一跟第二點,只是疑問是不是在使用 function 前加上 $(function() { }) 會不會才是正確的,但我看了下 network 沒有少讀 functions.js
我比較好奇的是
你自己宣告的 function 噴 not defined
你怎麼會認為是 jQuery 的問題
松松 iT邦研究生 2 級 ‧ 2020-10-26 17:20:56 檢舉
listennn08:其實我也不是説是 jQuery 問題,只是 function 裡面有用到 jquery,就這樣。(當然我也是後來才補充 function 在寫啥)
通靈亡 iT邦研究生 4 級 ‧ 2020-10-26 17:28:32 檢舉
你所謂的有機率發生,是指在同一個網頁還是不同的網頁?
如果是不同的網頁,有可能因為每個網頁或檔案所在的資料夾不同
造成引入的路徑錯誤,無法找到你呼叫的Function

例如:
A網頁在rootDir/a.php
B網頁在rootDir/dirA/a.php

而你的function.js在rootDir/function.js
兩個網頁都用<script src="functions.js"></script>
在A網頁會正常,換到B網頁引入時會發生你說的錯誤

所以,找問題很忌諱像你這樣,沒方向的預設立場
只會千錯萬錯都是JQuery的錯。
幫一個不重視自己提問的人是一件浪費時間的行為.

2 個回答

4
japhenchen
iT邦高手 1 級 ‧ 2020-10-27 07:41:47
最佳解答

只是被webserver快取起來而已,你可以簡單的從瀏覽器端按下ctrl + F5強制更新快取,就能解決問題

或是你在script src="xxxxxxx.js後面加上隨機值,如果你用的是php....

<?php 
    $rnd = rand(1,1000000);   
?>
<script type="text/javascript" src="main.js?q=<?php echo $rnd;?>"></script>

https://ithelp.ithome.com.tw/upload/images/20201027/20117954geBdIM2rMf.jpg
也可強制伺服器每次都重新載入,但不用更改server上的全局設定值

5
浩瀚星空
iT邦超人 1 級 ‧ 2020-10-26 16:02:19

我大膽的假設,你出問題的變數。一定跟ajax有關。

但這只是假設而已。請問犯什麼法呢?

utap2001 iT邦新手 5 級 ‧ 2020-10-27 21:01:39 檢舉

樓主寫的function不是一般的函數,是ajax,所以只要網路有問題,資料沒有回傳,網頁就會not defined,這就是為什麼每次報錯都有機率的問題,當然這也只是猜測,我之前也碰過類似的情況
還有我覺得debug還是要自己慢慢去找,chrome很方便,可以報錯也可以偵錯,還會回報錯誤情況,我每次debug完都會發現,原來我以前的某些認知是錯的,我的老師也說他進步最多的時候就是debug完的時候

我要發表回答

立即登入回答