2016-12-30 70 views
1

我對此代碼有問題。 出現這種情況: 距離的console.log啓動代碼,我得到空,如果我按更新按鈕功能的工作原理。將ajax結果寫入變量的函數

爲什麼會發生這種情況? 我該如何解決?

var urljson = "data_json.php"; 
var data = null; 
var jqXHR = $.ajax 
({ 
    type: "GET", 
    url: urljson, 
    dataType: 'json', 
    success: successHandler 

}); 
function successHandler(result) { 
    data = result; 
} 

function update(){ 
var jqXHR = $.ajax 
({ 
    type: "GET", 
    url: urljson, 
    dataType: 'json', 
    success: successHandler 

}); 
function successHandler(result) { 
    data = result; 
} 
} 

$(document).ready(function(){ 

console.log(data) //// null 

}); 


document.getElementById('update').addEventListener('click', function() { 

update(); 

console.log(data) //// Array [ Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, other 3213… ] 

}); 
+1

上的document.ready事件時,JSON並沒有從服務器還沒有恢復,所以數據仍然是零。只有當JSON文件到達並且succesHandler被觸發時,纔會設置數據。 – Shilly

回答

0

頁面加載時,update()不獲取調用,從而data爲空。將你的函數調用添加到$(document).ready(),它應該可以工作。

+0

了var jqXHR不完全一樣的update(),所以雖然這是真的,更新()不會被調用,改變'$(文件)。就緒(函數(){執行console.log(數據)});'到'$(document).ready(function(){update(); console.log(data)});'仍然不起作用。數據只能被設置一次的XHR調用觸發successHandler,所以任何與數據做了應該進入successHandler,不進的document.ready click事件只能因爲腳本負荷jqXHR已經取出的時候更新JSON文件( )被點擊調用。 – Shilly

1

$.ajax()返回結果異步。使用success處理程序或.then()鏈接到$.ajax()來處理從請求返回的響應。

function update() { 
    var jqXHR = $.ajax({ 
    type: "GET", 
    url: urljson, 
    dataType: "json", 
    success: successHandler  
    }); 

    function successHandler(result) { 
    data = result; 
    // do stuff with `data` here 
    console.log(data); 
    } 
} 

$(document).ready(update); 

的jsfiddle https://jsfiddle.net/89jkzzyk/

+0

它的工作原理,但我如何使用「$(document).ready(update)」中的「date」變量? – Snakeater

+0

不確定你的意思?在'success'回調或'.then()'回調中訪問'$ .ajax()'響應的結果。 – guest271314

+0

我試圖用這種方式使用日期變量,但不起作用: $(document).ready(update),function(){ var length = data.length; 的console.log(長度) }; – Snakeater