JQuery变量没有延续到JavaScript

时间:2014-03-08 18:42:02

标签: javascript php jquery html ajax

我正在尝试使用JQuery从URL中获取php的变量,并在javascript中使用该变量来更改页面上的内容。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
      $.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
      var alertstate=data.isit;
      alert('pretty awesome, eh? ' + alertstate);
      });
    </script>

    <script type="text/javascript">
    if (alertstate==1) {
    document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
    play_single_sound(audiotag1);
    }
    </script>

代码一直在JQuery中使用警报,但是一旦我到达Javascript if语句,错误控制台就会告诉我没有定义alertstate。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:5)

你有两个问题:

  1. $.get是异步的,因此您调用 $.get 的地方启动 ajax调用,但随后您的代码继续执行ajax调用是异步发生的。因此,$.get之后的代码将在$.get完成之前运行。

  2. 您的alertstate变量是您作为回调$.get给出的函数中的变量;它不存在于你的第二个代码块中的代码中,它希望它是一个全局变量。

  3. 相反,将第二个脚本中的逻辑放入第一个$.get回调中:

    <script>
    $.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
      var alertstate=data.isit;
      alert('pretty awesome, eh? ' + alertstate);
      if (alertstate==1) {
          document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
          play_single_sound(audiotag1);
      }
    });
    </script>
    

    如果你真的,真的希望它们是分开的,你可以将所有内容包装在一个作用域函数中(以避免创建全局变量),使用一个变量,回调结束,并使用$.get返回的promise,像这样:

    <script>
    (function() {
        var alertstate, promise;
    
        promise = $.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
          alertstate=data.isit;
          alert('pretty awesome, eh? ' + alertstate);
        });
    
        promise.then(function() {
          if (alertstate==1) {
              document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
              play_single_sound(audiotag1);
          }
        });
    })();
    </script>
    

答案 1 :(得分:3)

$。get()是异步的,因此上面的代码不会按顺序执行。尝试下面的代码,你需要在$ .get()方法的成功回调中调用一个方法。

<script>
      var alertstate;           
      $.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
           alertstate=data.isit;
           alert('pretty awesome, eh? ' + alertstate);
          playSound();
      });
    </script>

    <script type="text/javascript">
        function playSound(){
            if (alertstate==1){
               document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
               play_single_sound(audiotag1);
           }
        }
    </script>

答案 2 :(得分:2)

问题在于范围。 alertstate will only exist inside of your $。get`但不在其之外

$.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
    var alertstate=data.isit;

    //You can use alertstate in here
    alert('pretty awesome, eh? ' + alertstate);
});

//But not here

答案 3 :(得分:2)

<script>

$.get('http://jsonp.jit.su/?url=http://5.175.191.73/alert.php', function(data){
    var alertstate=data.isit;
    alert('pretty awesome, eh? ' + alertstate);
    doWork(alertstate);
});

function doWork(state) {  
  if (state==1) {
    document.getElementById('theImg').src="http://upload.wikimedia.org/wikipedia/commons/e/e7/Alert.gif";
    //hoping audiotag1 is pre-defined
    play_single_sound(audiotag1);
  }
}

</script>