2016-07-04 15 views
0

私はXML-HTTP-Requestを持つ関数を持っています。残念ながら私はこの関数を呼び出すと私のDB結果を返さない。getUserdataByToken() < - 働いて、2番目の関数を介してsendPost(壁)他のAjax関数内でAjax関数を呼び出そうとすると戻り値が未定義

2番目の関数の中に戻り値(配列)を入れたいだけですが、値は常に "未定義"です。誰か助けてくれますか?第二の機能(AJAX)を経由して

function getUserdataByToken() { 

    var token = localStorage.getItem("token"); 
    var userDataRequest; 

    //-AJAX-REQUEST 
     var xhttp; 
     if (window.XMLHttpRequest) { 
      xhttp = new XMLHttpRequest(); 
     } else { 
     // code for IE6, IE5 
      xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     var url= window.location.protocol+"//"+window.location.host+"/getuserdatabytoken"; 
     var param = "token=" + token; 

     xhttp.onreadystatechange = function() { 
      if (xhttp.readyState == 4 && xhttp.status == 200) { 
       userDataRequest = JSON.parse(xhttp.responseText); 

       if (userDataRequest.success === "false") { 
        warningMessage('homeMessage', false, userDataRequest.message); 
       } else { 
        return userDataRequest; 
       } 
      } 
     }; 

     xhttp.open("POST", url, true); 
     xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xhttp.send(param); 
} 

関数呼び出しは "userDataRequest"(ファンクション1のリターン)のためにあまりにも "未定義" の値をリードしています。

function sendPost(wall) { 

     var content; 
     var token = localStorage.getItem("token"); 
     var userData = getUserdataByToken(); // PROBLEM 

     console.log(userData); // "leads to undefined" 
     alert(userData); // "leads to undefined" 
… Ajax Call etc… 

P.S.それは私の最初の投稿stackoverflowで、私は常にヒントに感謝しています。 ありがとう!

+0

非同期呼び出しから戻ることはできません。 XMLHTTPREQUESTは非同期呼び出しです。それは常に定義されていない –

+0

を返します。コールバック関数を現在の関数に渡す必要があります。 –

+0

この文の 'return userDataRequest;'は意味を持ちません。 'sendPost'に置き換えてください。 – ftor

答えて

2

userdata値は、匿名のAjaxコールバック関数内にのみ存在し、そこから返されます。それはどこにも返されないので、それは無意味です。確かに値はgetUserdataByTokenから返されません。 Ajaxの呼び出しが非同期のであることを忘れないでください。 sendPostgetUserdataByTokenとなっても、リクエストは行われません。

一般的に、jQueryのようなライブラリを使用する方がずっと良いでしょう。コードをはるかに簡単にすることとは別に、この種の問題を解決するために明示的に用意されているPromisesのようなものを使用することができます。

(本当にIE5をサポートする必要がありますか?)

+1

IEのコメントにプラス!世界の最後のコンピュータからこのくそはいつ取り除かれますか? – linusg

+0

@linusg nice one .... .... lol –

関連する問題