我最近正在学习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'。谁能请帮忙告诉我我做错了什么?非常感谢。
答案 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