2016-08-27 6 views
0

私は$httpというデータをサーバーに保存し、jsonで応答を受け取るという要求を送信しています。私は応答に基づいて成功または失敗のメッセージのようなアンドロイドToastを表示したい。 スコープ変数を宣言し、最初に$scope.showSuccessToastにfalseに設定します。サーバーからのメッセージが肯定的であれば、それをtrueに、それ以外をfalseに設定します。jqueryのスコープ変数の即値にアクセスする方法

htmlのjavascript関数で変数$scope.showSuccessToastにアクセスします。これは、サーバが保存するために呼び出されたときに呼び出されます。私はng-clickonclickの両方を使用しています。

したがって、$scope.showSuccessToastが真の場合、私は成功メッセージまたは失敗メッセージを表示します。しかし、初めてサーバーからの応答が肯定的であっても、失敗メッセージが表示されます。そのため、関数が変数にアクセスするまでに値がtrueに設定されていない可能性があります。次回は応答が失敗したと思っても、私は成功メッセージを受け取ります。

私は、これは、応答HTMLで

$scope.showSuccessToast="false"; 
$scope.saveTollPlaza = function(){ 
    $http({ 
     method:'POST', 
     url:"http://192.168.1.191:3020/addTollPlaza?PlazaName="+$scope.plazaname+"&PlazaAddress="+$scope.plazaaddress+"&PlazaContactNo="+$scope.plazacontactnumber+"&PlazaLanes="+$scope.plazalane+"&PlazaStatus="+$scope.plazastatus+"&ClientID="+$scope.clientid 

    }) 
    .then(function success(response){ 
     console.log("success" + response.data.message); 
     console.log("http://192.168.1.191:3020/addTollPlaza?PlazaName="+$scope.plazaname+"&PlazaAddress="+$scope.plazaaddress+"&PlazaContactNo="+$scope.plazacontactnumber+"&PlazaLanes="+$scope.plazalane+"&PlazaStatus="+$scope.plazastatus+"&ClientID="+$scope.clientid); 
     $scope.plazaname=""; 
     $scope.plazaaddress=""; 
     $scope.plazacontactnumber=""; 
     $scope.plazalane=""; 
     $scope.plazastatus=""; 
     $scope.clientid=""; 

     if(response.data.message == 'added'){ 
      $scope.showSuccessToast="true"; 
      console.log("setting true"); 
     } 
     else{ 
      $scope.showSuccessToast="false"; 
      console.log("setting false"); 
     } 
    },function errorCall(response){ 
     console.log("errorCall"+ response); 
    }) 

スクリプトに基づいて実現するために何をしますか:

<script type="text/javascript"> 
    function jShowToast() { 
     console.log($('#fullContainerID').scope().showSuccessToast); 
     if($('#fullContainerID').scope().showSuccessToast == "true") 
     { 
      document.getElementById("successFailureDiv").innerHTML="Save Success"; 
      $('.error').stop().fadeIn(400).delay(3000).fadeOut(400); //fade out after 3 seconds 
      $('#fullContainerID').scope().showSuccessToast ="false"; 
     } 
     else{ 

      document.getElementById("successFailureDiv").innerHTML="Save failed"; 
      $('.error').stop().fadeIn(400).delay(3000).fadeOut(400); 
     } 
    } 
</script> 
+0

また、 'jShowToast'で' setTimeout'関数を使って動作させました。 – boo

答えて

0

JavaScriptが非同期です。つまり、2つの要求のどちらが最初に終了するのか予測できません。そのために、コールバック関数があります。

成功するコールバックからtoastを呼び出す必要があります。つまり、ライブラリを使用してjastではなく、トーストを表示します。

このようにして、コードはよりクリーンになり、他の人が理解しやすくなります。他の人はあなたの現在の乾杯を見つけるまでにある程度時間を費やさなければならないかもしれません。

成功コールバックにはthisまたはthisを使用してください。

関連する問題