2017-07-21 6 views
0

jQueryのajax呼び出しで何度も試してみましたが、更新する前に値を返します。私はそれをgoogledし、私のために誰も働かせない多くのソリューションを試しました、私はいつも未定義の値を取得します。ここでは、jQueryの定義されていない値を返す約束のあるajaxの呼び出し

を認めることになる任意のヘルプは、コンソール上の私のコード

$(document).ready(function() { 
    console.log(secondvalidation()); 
}); 

function onemorevalid() { 
    console.log("working"); 
    //this ajax call return 1 
    return jQuery.ajax({ 
    url: 'handler/email.php', 
    method: 'POST', 
    }); 

} 


function secondvalidation() { 
    onemorevalid1 = new onemorevalid(); 
    onemorevalid1.done(function(data) { 
    console.log("data " + data); 
    return data; 
    }); 
} 

出力は

working 
undefined 
data 1 

答えて

1

あなたは法の外にオブジェクトを作っているです。基本的には間違っています。また、後で呼び出されるコードにajax呼び出しの値を渡す必要がある場合は、async:falseをクエリに追加して、コードがajax応答を待つようにすることもできます。

文書準備機能でajaxメソッドが呼び出された後に、other_function()を呼び出すようにしてください。

だから私は何が必要だと思うが、このです:

$(document).ready(function(){ 
var requested_data; 


     var request = $.ajax({ 
     url:'handler/email.php', 
      method:'POST', 
      async:false, 
      dataType: 'text' 
    }); 

    request.done(function(data) { 
     console.log("data " + data); 
requested_data = data 
    }); 



function other_function(){ 
console.log("toing_toing: " + requested_data); 
} 
other_function(); 
    }); 

は、ここでは、このコードのworking example fiddleです。

per this answerとしてこれを達成する他の方法があることに注意してください。 async:falseは、リクエストが完了するまでスクリプトがフリーズし、リクエストに時間がかかり、悪いUIエクスペリエンスを与える場合があります。

+0

この返されたデータを他の関数でどう使うことができますか? – Ganesh

+0

@Ganesh更新された答えを確認してください –

+0

あなたの答えは便利ですが、async:falseを使用しています。非難されていますが、 "async:false"を使用せずにあなたの答えのようなことをすることはできますか? – Ganesh

関連する問題