2016-12-30 19 views
1

私はこのコードに問題があります。 これが起こります: console.logからコードを起動します。私が更新ボタン機能を押した場合、nullが返されます。変数に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

、JSONはまだサーバから返されていないので、データはまだnullです。 JSONファイルが到着し、succesHandlerがトリガーされたときにのみ、そのデータが設定されます。 – Shilly

答えて

0

ページのロード、update()が呼び出さ取得されていない、のでdataはnullです。あなたの関数呼び出しを$(document).ready()に追加すればうまくいくはずです。

+0

var jqXHRはupdate()とまったく同じですので、update()は呼び出されませんが、 '$(document).ready(function(){console.log(data)});' '$(document).ready(function(){update(); console.log(data)});'はまだ動作しません。データは、xhr呼び出しがsuccessHandlerをトリガーするとセットされます。したがって、データで行われた処理はdocument.readyではなくsuccessHandlerに行われます。 )がクリックによって呼び出されます。 – Shilly

1

$.ajax()結果は非同期で返されます。 successハンドラを使用するか、.then()$.ajax()にチェーンして、requestから返された応答を処理します。 document.readyイベントで

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

このように日付変数を使用しようとしていますが、機能しません。 $(ドキュメント).ready(更新)、function(){ var length = data.length; (長さ) – Snakeater

関連する問題