1

こんにちは、グローバル変数「usuario」があり、$.post 関数から取得した値を入れたいのですが、機能しません。変数は元の値を保持します。私はテストをしました、私はアラートを入れました(usuario); 関数に入力すると機能し、アラートには関数からの値が表示されます。以下のコード:

    <script type="text/javascript" >

    var usuario="";
    $.post("cargarDatos.php",{},function(r){

            usuario = r;
            alert(usuario);

        });
    if(usuario !== "Nada"){
        document.write("El usuario conectado es: "+usuario);
        document.title="Actividad de "+usuario;

    }else{
        document.write("No hay usuario conectado!");

        }



</script>
4

3 に答える 3

1

$.post() は非同期です。アラートは、要求応答がサーバーから返されてコールバック関数が呼び出された後に発生します。一方、スクリプトは、コールバックが実際に発生する前に既に if ステートメントを実行しています。いくつかのアラートを if else ブロックに入れると、発生する順序を確認できます。

于 2013-05-25T03:06:25.740 に答える
1

Ajax が非同期であるため、処理ロジックは ajax コールバックの前に実行されます。そのため、ajax コールバックが発生した後に処理を行う必要があります。

この方法を試してください。

   function CallAjax(callback)
   {

       $.post("cargarDatos.php",{},function(r){
       callback(r); //pass in the result
     });


   function MakeCallProcessResult
   {
      CallAjax(myCallBack);

   }

   function myCallBack(usuario )
   {

          alert(usuario);
          if(usuario !== "Nada"){
            document.write("El usuario conectado es: "+usuario);
            document.title="Actividad de "+usuario;

            }else{
            document.write("No hay usuario conectado!");

            }
   }
于 2013-05-25T03:09:35.813 に答える
0

これは、呼び出しが非同期であり、ブロックを$.post実行した時点で変数に値がない (空白であるため) ために発生します。ifusuario

ifおよびブロックをコールバック内に配置するelseか、他の関数を作成してコールバック内で呼び出して、期待される値で変数を正しく$.post取得できます。usuario

コードが必要ですか?

幸運を。

于 2013-05-25T03:07:26.957 に答える