1. 程式人生 > >ajax返回資料賦值給全域性變數的問題

ajax返回資料賦值給全域性變數的問題

問題的引出

使用ajax從後臺查詢資料給ztree賦值初始化時, 發現ajax成功回撥方法中不能將返回值賦給js中宣告的全域性變數, 如圖所示:
這裡寫圖片描述

ztree初始化失敗, 因為ztreeNodes為Null(請自動忽略setting的配置), 在瀏覽器控制檯可以看到:
log1處列印了資料, 而log2顯示undefin.
你會發現當你先 alert 一下,一切又正常了.
然而, 將91行的ztree初始化程式碼移至84行, 頁面是可以顯示樹形圖的.

解決:

出現這種問題是因為js程式碼的執行順序, 因為ajax預設async為true(非同步), 非同步載入的資料還未收到, 上圖中的程式碼執行順序是:
  log2 —> log1
也就是說在91行執行的時候, ajax還沒有執行, 所以ztreeNodes是undefin.

解決方法有兩個:

1.將ztree的初始化放在ajax的回撥方法中.

2.設定ajax的async:false, 如果這樣, 瀏覽器就會等待ajax執行完畢再執行下面的程式碼

相關推薦

ajax返回資料全域性變數的問題

問題的引出 使用ajax從後臺查詢資料給ztree賦值初始化時, 發現ajax成功回撥方法中不能將返回值賦給js中宣告的全域性變數, 如圖所示: ztree初始化失敗, 因為ztreeNodes為Null(請自動忽略setting的配置), 在瀏覽器控制

關於ajax請求資料,並將資料全域性變數的一些解決方法

在使用ajax請求資料是,開始的時候是打算將ajax的資料取出,並賦予給全域性變數,但是在實際編碼過程中發現並不能將資料賦予給最開始定義的全域性變數,出現這個問題的原因是由於ajax非同步載入的原因,所以只能用其他方法來解決,下來是解決的方法 第一個解決方法沒有使用全域性變數,直接在ajax請求中將請求到的

回撥函式的返回全域性變數問題

            今天遇到一個問題,在js中,回撥函式的返回值對全域性變數進行賦值,網上的解決方案主要是把非同步改為同步 async: false,好記性不如爛筆頭來記錄一下。             原始碼如下: $('#loginSubmit').click

shell 指令碼中將輸出內容一個變數時的換行問題(git tag命令內部有less命令)

shell 指令碼中將輸出內容賦值給一個變數時的換行問題(git tag命令內部有less命令) 參考網址 shell 指令碼中將輸出內容賦值給一個變數時的換行問題 注意git tag命令內部有less命令 示例 msg=`git tag` && echo "$m

X++: select 查詢結果直接一個變數

//AEL_ReplacementNote_detail 為table名 如果用這種方式直接將查詢結果賦值給一個變數,那麼from那裡就要用table名. real lvQty=(select sum(AEL_rld_req_qty) from AEL_ReplacementNote_deta

類中欄位區域性變數後再使用意義何在?

Concurrency-interest郵件列表中有人問了這麼一個問題:ArrayBlockingQueue中有個物件欄位lock,在ArrayBlockingQueue的很多方法中,使用這個lock時都將其先賦值給一個區域性變數,然後再通過區域性變數呼叫lock上的方法,而沒有直接使用lo

MySql 從一張表查詢的資料另外一張表的欄位(MySQL Update Query using a left join)

舉慄: 我們的使用者積分出現重複資料,然後我們要把重複資料刪除掉,重新計算使用者總積分,假設所有積分都是增加的積分。 使用者積分表test_user_points 使用者iduser_id 使用者積分總

JAVA開發12--將oracle查詢結果JAVA變數

        List<String> account_filter=new ArrayList<String>();  //陣列         String sql_a

Spring:url 標籤js變數

$("#deleteSingleUser").click(function (e) { e.preventDefault(); var id = $("#userId").val(); <spring:ur

通過指令碼的方式殺tomcat程序(shell指令碼),shell中將一個檔案的內容讀出一個變數

#!/bin/bash echo "==================stop tomcat=========================" ps -aux | grep /usr/local/

將命令結果一個變數

#!/bin/bash a=23 # Simple case echo $a b=$a echo $b echo # Now, getting a little bit fancier (command substitution). a=`e

vue介面資料data沒有反應

問題:     就是我在介面賦值給了data的變數,然後元件的效果沒有出來(我的是旋轉效果) 程式碼如下: data() { return { slides: [] } }, moun

系統無ifconfig,一條命令獲取本機ip並將其指定變數來使用

在Linux系統中,準確地獲取本機IP資訊是非常有用的。在寫bash shell指令碼事經常會用到IP,這時就需要我們使用一些辦法獲取本機IP並賦值給變數來使用。最近剛剛完成grep及sed的摸索、研究,本著學以致用的原則,用一條命令獲取本機IP並將其賦值給某個

Java中讀取配置檔案中的內容,並將其靜態變數的方法

應用場景 專案開發中某個功能需要抽取成方法寫成一個工具類,提供給別人使用。寫過工具類的人都知道,工具類中的方法一般都是靜態方法,可以直接使用類名點方法名呼叫, 使用很方便,比如判斷某個物件是否為空的方式Objects.equals().由於我寫的這個工具類中需要讀取配置檔案中的內容,但是常規方法注入成員變數時

ajaxjs中的全域性變數

在檢視頁面中,正在給bootstrap-table的表格中填入內容,由於內容需要轉換,所以需要再次呼叫Ajax;如下圖所示: 注意點:         async:false (即取消非同步)      

解決JQuery的ajax不能全域性變數的問題

今天在使用ajax給全域性變數賦值的時候發現無論用什麼方法都不行,下面先貼上問題程式碼: function isRetake(paperId) { var res = 1; // 傳送ajax請求 $.ajax({ async:false, url : bas

JQuery ajax 把後臺返回的List資料 遍歷出來 div

1、效果 2、前端程式碼 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-T

Ajax函式內呼叫非同步方法獲資料,無法及時獲取到返回 || 不使用快取結果

js預設是非同步的,比如下載3張圖片,你點選產生這個指令,但圖片下載完可能是2秒之後,“下載完成”的提示訊息也是在之後傳送給你,相當於多執行緒 也就是你寫了個函式,在裡面請求一組資料,並嘗試返回值,可能你函式走完了,請求的資料才拿到 比如: 解決方法: 用

ajax不能全域性變數,只能採用同步提交的方式?

等等有時間再來解決吧,反正現在同步提交可以給全域性變數賦值了。  async: false, ************************************************************************ 實現無重新整理自動載入最好也使用同

ajax方法如何全域性變數

在呼叫一個jquery的ajax方法時我們有時會需要該方法返回一個值或者給某個全域性變數賦值,可是我們發現程式執行完後並沒有獲取到我們想要的值,這時很有可能是因為你用的是ajax的非同步呼叫async:true(預設情況),如: function ManageComment