如何根据Ajax请求打印JavaScript?

时间:2013-11-21 01:49:25

标签: javascript php jquery ajax

请允许我详细说明。 我有这个Ajax脚本,它提取一件事。 refresh_on。 它有什么作用?它返回0或1。

 function startRefresh() {
        setTimeout(startRefresh, 60000);
        $.ajax({
            url: 'refresh.php',
            type: 'POST',
            dataType: 'JSON',
            data: {task: "reload"},
            success: function(data) {
                $.each(data, function(i, attr){
                    if (attr.refresh_on == 0) {
                        //this doesn't work 
                        /*Write/return this in JavaScript:*/ line[1]="Offline.";
                    } else {
                        //this doesn't work
                        /*Write/return this in JavaScript:*/ line[1]="Online.";
                    };
                })
            }
        });
    }

如果ajax返回时使用refresh_on == 0或者refresh_on == 1 - 我希望它打印相应的数组项。 必须是一个数组项目。

</head>
  <body>
    <script type="text/javascript">
      var line=new Array()
      startRefresh();
      //output either "line[1]=\"Offline.\""; or "line[1]=\"Online.\"";
    </script>
  </body>

这是PHP文件:

if (isset($_POST['task']) && $_POST['task'] == "reload") {
    $stmt = $connection->prepare("SELECT refresh_on FROM refresh");
    $stmt->execute();

    $result = $stmt->get_result();

    $encode = Array();
    while ($row = $result->fetch_assoc()) {
        $encode[] = $row;
    }
    echo json_encode($encode);  
}

如果重要 - 这是JSON回复:

[{"refresh_on":1}]

有没有办法使用该函数插入/输出/打印数组项?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

所以这里可能会发生一些事情,但是首先,你要将变量包装在一个引号中,所以所发生的一切都是正在制作一个字符串并立即被丢弃到地板上。让我们从做如下的事情开始:

 function startRefresh() {
        setTimeout(startRefresh, 60000);
        $.ajax({
            url: 'refresh.php',
            type: 'POST',
            dataType: 'JSON',
            data: {task: "reload"},
            success: function(data) {
                $.each(data, function(i, attr){
                    if (attr.refresh_on == 0) {
                        //this doesn't work 
                        line[1] = "Offline.";
                    } else {
                        //this doesn't work
                        line[1]= "Online.";
                    };
                })
            }
        });
    }

现在,如果我没记错的话,ajax函数将调用你的成功回调,它将接管你的本地范围。我不相信该回调可以访问line,所以我们应该/实际上可以将该回调移动到闭包中的自己的函数中:

<script type="text/javascript">

(function() {                                                                                                                                                                                                                      

  var line = []; 
  startRefresh();

  function startRefresh() {
    setTimeout(startRefresh, 60000);
    $.ajax({
      url: 'refresh.php',
      type: 'POST',
      dataType: 'JSON',
      data: { task: "reload" },
      success: refreshResponse
    }); 
  }

  function refreshResponse(data) {
    $.each(data, function(i, attr) {
      if (attr.refresh_on == 0) {
        line[1] = "Offline.";
      } else {
        line[1] = "Online.";
      }   
    }); 
  }

})();

</script>

我们已经将它包装在一个自执行函数中,以便为我们提供一些很好的封装,并且由于line位于找到refreshResponse的函数中,因此该变量应该是可访问的。

但我们还没有完成!

首先,我们可以轻松地使变量赋值更容易,如下所示:

line[1] = (attr.refresh_on == 0) ? "Offline." : "Online.";

......我们也希望在平等声明上加倍,以避免变量强制:

line[1] = (attr.refresh_on === 0) ? "Offline." : "Online.";

试一试,让我们看看我们在哪里。

答案 1 :(得分:0)

不确定您期望"line[1]=\"Offline.\"";做什么,但它不会做任何事情。也许你的意思是:line[1]= "Offline";?尝试将这行代码放在那里,以测试它是否有效:console.log('Offline');

如果该行正在执行并且您在控制台中看到输出,则您只需要定位一些要放置&#34;离线&#34; string into,例如:

<div id="status"></div>
<script>
....
var status = document.getElementById("status");
if (attr.refresh_on == 0) {
   status.textContent = "Offline";
} else {
    status.textContent = "Online";
};
....
</script>