ajax用jQuery调用PHP脚本显示状态

时间:2014-02-14 23:40:56

标签: php jquery ajax json

我最近正在学习jQuery,并尝试对一个非常简单的PHP脚本执行ajax调用,该脚本只输出1个json文本。当我在脚本中只有一个echo语句时,我能够使呼叫正常工作。然后我试着在echo 4 json每次睡眠3秒后模仿一个复杂的脚本,但这次我无法使它工作。

这是我的index.html:

<!DOCTYPE html>
<html>
  <head>
      <title>ajax</title>
          <script src="jquery.js"></script>
          <script src="app.js"></script>
  </head>
  <body>
      <div id="loading"></div>
   </body>
 </html>

这是我的app.js:

$(function() {
    $('#loading').html('<img src="http://preloaders.net/preloaders/287/Filling%20broken%20ring.gif"> loading...');
    var req = $.ajax({
        url: "x.php",
        dataType: "json"
    });
    req.done(function(data) {
        setTimeout(function () {
                            $('#loading').html(data.text);
                                        }, 1000);
    });
});

这是我的x.php:

<?php
    sleep(3);
    echo json_encode(array("text"=>"you got me1"));
    sleep(3);
    echo json_encode(array("text"=>"you got me2"));
    sleep(3);
    echo json_encode(array("text"=>"you got me3"));
    sleep(3);
    echo json_encode(array("text"=>"you got me4"));
?>

我的目的是试图在几秒钟后逐一展示'你有我','你有我'2'。谁能请帮忙告诉我我做错了什么?非常感谢。

1 个答案:

答案 0 :(得分:0)

JSON必须是单片字符串。您不能在单个响应中输出四个单独的JSON结构。 e.g。

$x = array('foo');
$y = array('bar');
$z = array('baz');

echo json_encode($x);
echo json_encode($y);
echo json_encode($z);

将发送

['foo']['bar']['baz']
穿过电线。这不是语法上有效的JSON,只会在接收端产生一个解析错误。

如果要以JSON形式发送4个不同的数据块,则要么必须执行四个单独的请求,要么将每个响应嵌入到子数组中,例如

$response = array(
  'x' => array('foo'),
  'y' => array('bar'),
  'z' => array('baz')
);
echo json_encode($response);

请记住,JSON(几乎完全)与Javascript中变量赋值的“右侧”相同:

var foo = XXX;
          ^^^---json goes here

如果你想要接受你的输出,你必须生成一些你可以直接粘贴到该赋值操作并让JS引擎正确解析/执行它的东西,所以

var response = ['foo']['bar']['baz']; // syntax error
var response = [['foo'],['bar'],['baz']]; // syntactically valid