2016-10-24 8 views
-1

私は以下のajaxメソッドを持っています。成功するとグローバル変数を設定したいが、動作していないようだ - コンソールは空のオブジェクトを返す。 asyncをfalseに定義した場合のみ動作します。しかし、私は非同期のajaxメソッドを維持したいと思います。これをどのように機能させることができますか?jQuery Ajax Post - コールバック関数を使用してグローバル変数を設定できませんか?

function ajaxCallBack(data) { 
     var response = $.parseJSON(data.d); 
     appointment = { startDate: response.startDate, endDate: response.endDate }; 
     console.log(appointment); 
} 

または

function ajaxCallBack(data) { 
     var response = $.parseJSON(data.d); 
     appointment = { startDate: response.startDate, endDate: response.endDate }; 
     printAppointment(); 
} 

// define as global: 
function printAppointment() { 
    console.log(appointment) 
} 
+0

の可能性のある重複した[JavaScriptを:Ajaxリクエストの後にグローバル変数](http://stackoverflow.com/questions/3222347/javascript-global-variables-after-ajax-requests) – Ted

+0

http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – Ted

+0

@Tedあなたの情報は全く怠け者ではありません。私は頭を傷つけて、何時間もグーグルで遊んでいました。あなたが他の人の何人かが行ったように有用な回答を掲示するのに迷惑をかけることができないならば、すべての質問に潜在的な重複をマークしないでください。あなたが何らかの説明をして解決策を提出するのに気を使うことができなければ、怠け者である人なら何でもよい。 – adam78

答えて

0

ajaxは非同期操作です。したがって、console.logはajax successより前に実行されます。 ajaxCallBack関数から変数を慰める

function ajaxCallBack(data) { 
    var response = $.parseJSON(data.d); 
    appointment = { startDate: response.startDate, 
        endDate: response.endDate }; 
    console.log(appointment); 
} 
1

console.log()は、実行することができますコンソールでappointmentを表示するには、(ajaxが非同期である)ajaxCallback()前にトリガされ、appointment前に設定されていますそれが完了するのを待たずに表示されるコードを意味します。したがって、あなたのconsole.logは、ajaxが必ずオブジェクトを生成するために必要なものを取得する前に実行されています。

console.logステートメントをコールバック内で移動してみてください。appointmentを設定した行の直後に配置してください。

1

アヤックスは非同期に行われます

var appointment = {}; 

if ($("#Appointment").is(":checked")) { 
    $.ajax({ 
      type: "POST", 
      url: "someurl", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify({ 
       dateStart: moment() 
      }), 
      // async: false, 
      dataType: "json", 
      success: function(data) { 
       ajaxCallBack(data); 
      } 
    }); 

    function ajaxCallBack(data) { 
      var response = $.parseJSON(data.d); 
      appointment = { startDate: response.startDate, endDate: response.endDate }; 
    } 
} 

console.log(appointment); 
+0

@Ted、コードの最後の行を参照してください。 –

+0

@Lucas Costa - あなたは正しい人です。私は何度も何度もこの質問を見ていて、私の目は私のことをやってくれました:) – Ted

関連する問題