2017-01-17 17 views
1

私はgetVenueFromFSの戻り値をRealTimeUpdate.phpページに送信しようとしましたが、成功しません。値は、警告メソッドを使用して正しく印刷されますが、私はそれを送信することはできません、プロジェクトが完了したら、ユニサーバーに置く必要があります、彼らはajaxや他のサードパーティーを持っていない。機能: `PHPコードの入力としてjavascriptの戻り値を使用

<script type="text/javascript"> 
      <!-- 
       function getVenueFromFS() { 
        var venueFSID = "4a1ef31ff964a520ef7b1fe3"; 
        var xhttp = new XMLHttpRequest(); 
        var url = 'https://api.foursquare.com/v2/venues/'+venueFSID+'?oauth_token=MOBUA5IQL5PJGHPMAEU22OQDWIJJWF425XO5JLOSFHGJOTAC&v=20161224'; 
        xhttp.onreadystatechange = function() 
        { 
         if (this.readyState == 4 && this.status == 200) 
         { 
          var obj = JSON.parse(xhttp.responseText); 
          alert("venue number: " + venueFSID + " was retrieved successfully"); 
         alert("like count: " + obj['response']['venue']['likes'] 
          return obj['response']['venue']['likes']['count']; 
         } 
        }; 
        xhttp.open("GET", url, true); 
        xhttp.send(); 
       } 

      //--> 
     </script>` 
    but using    //$.post('RealTimeUpdate.php', {variable: javascriptVariable}); 
    or 
        //window.location.href = "RealTimeUpdate.php?name=" + javascriptVariable; wont work. 

}

Soultion: 私は体の中のスクリプトを入れて、ない頭を、返された値を無効にし、それを取得します別の関数を書いた、とのsetTimeoutを使用し、おかげで皆

function myJavascriptFunction() { 
      var data = getVenueFromFS(); 
      //alert("NEW" + data); 
      //$.post('RealTimeUpdate.php', {variable: data}); 
      //window.location.href = "RealTimeUpdate.php?name=" + data; 
      var FSID = document.getElementById('FsId').value; 
      window.location.href = "RealTimeUpdate.php?name=" + data + "&FSID=" + FSID; 
     } 
     function getVenueFromFS() { 
      var obj 
      //var venueFSID = document.getElementById('FsId').value; 
      var venueFSID = "4a1ef31ff964a520ef7b1fe3"; 
      var xhttp = new XMLHttpRequest(); 
      var url = 'https://api.foursquare.com/v2/venues/'+venueFSID+'?oauth_token=MOBUA5IQL5PJGHPMAEU22OQDWIJJWF425XO5JLOSFHGJOTAC&v=20161224'; 
      xhttp.onreadystatechange = function() 
      { 
       if (this.readyState == 4 && this.status == 200) 
       { 
        obj = JSON.parse(xhttp.responseText); 
        alert("venue number: " + venueFSID + " was retrieved successfully"); 
        alert("new like count: " + obj['response']['venue']['likes']['count']); 
        parameter = obj['response']['venue']['likes']['count']; 
        setTimeout(function(){ window.location.href = "RealTimeUpdate.php?name=" + parameter }, 6000); 
        // return obj['response']['venue']['likes']['count']; 
       } 
      }; 
      xhttp.open("GET", url, false); 
      xhttp.send();`enter code here` 
      return obj['response']['venue']['likes']['count']; 
     } 
+0

の可能性のある重複(http://stackoverflow.com/questions/14220321/how- [どのように私は非同期呼び出しからの応答を返すのですか?] do-i-return-as-asynchronous-call) – CBroe

+0

私は問題を理解していますが、私は質問でそれを説明しました。 iamはajaxを使用できません –

+0

XMLHttpRequest _is_ AJAX。 – CBroe

答えて

-1

私はあなたが達成したいものを、私が正しく理解されていないと確信しているが、私は

1. xhttp should be sync, so xhttp.open("GET", url, false); // ASYNC -> false 
2. var data = getVenueFromFS(); 
    $.post('RealTimeUpdate.php', {variable: data }); 
を想定

のXMLHttpRequestは非同期である場合、期待どおり、フローはありません。)

+0

私はデータベースをobj ['response'] ['venue'] ['likes'] ['count']の下に保存された最新の値で更新しようとしているので、最初に新しい値を取得してphpを実行し、定期的な更新クエリを新しい値でプリフォームします。問題はメソッド$ .post( 'RealTimeUpdate.php'、{variable:data})です。未定義の値を送信します。これとは対照的に、印刷された値は283 –

+0

ですか?確かに、URLは正しいですか? PHPファイルで 'echo" Hello Liran ";'と書くと、ブラウザのコンソール(ネットワークセクション)で応答が見えるかどうかを見ることができます。[chrome console](https://developers.google.com/web/tools/chrome-devtools/console /) 以前に書いたように、問題は非同期接続である可能性があります。 このjQueryの関数はあなたがfalseに非同期(async)設定してみましょう: '$アヤックス({ タイプ: 'POST'、 URL: 'RealTimeUpdate.php'、 データ:{変数:データ}、 成功:成功、 非同期: false }); ' – HubertS

+0

最近、いくつかのブラウザがメインスレッド上で同期リクエストに対して警告を出し始めており、将来はこれがブロックされる可能性があります。いいえ、asyncをfalseに設定するのは適切な解決策ではありません。 – CBroe

関連する問題