当我尝试从数据库中绘制数据时,我的javascript会返回两次JSON。 为什么我的JSON会以这种方式返回?
PHP:
<?php
require ('functions.inc');
dbconn(); //establish my db connection
mysql_selectdb("acts");
$query = mysql_query("SELECT * from actInfo");
while ($row = mysql_fetch_assoc($query)){
$name = $row[ActName];
}
$json=json_encode($name);
echo $json;
?>
使用Javascript:
function getActNames(){
if (windows.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
var json = xmlhttp.responseText;
var parseV = JSON.parse(json);
$("#somediv").append(parseV);
}
xmlhttp.open("POST","PHP/actMgmt.php",true);
xmlhttp.send();
}
我通过以下方式在HTML中调用它:
<p class = "button" onclick= "getActNames();return false;">Some Button </p>
我的JSON调用正在创建2倍的请求记录。因此,而不是得到以下内容:
["act1","act2","act3"]
我得到了:
["act1,"act2","act3"]["act1","act2","act3"]
似乎每次都会召唤两次。
另外,当我转到PHP页面时,它只返回以下内容:
["act1","act2","act3"]
**编辑
var_dump($ name)输出: array(6)=&gt; {[0] =&gt; string(4)“act1”[1] =&gt; string(4)“act2”[2] =&gt;串(4) “ACT3”}
**编辑
console.log(xmlhttp.responseText)给了我:
JSON.parse: unexpected end of data
["act1","act2","act3"]
答案 0 :(得分:1)
我现在看到了。我将来会强烈建议您使用像jQuery这样的框架来避免这种情况。编写自己的AJAX函数往往会导致这样的问题。 您的AJAX调用未检查正确的状态。它只是寻找任何回报。因此,每次收到数据包时,它都会启动您的匿名函数。
将您的代码更改为此代码,您应该只获得一个数组
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var json = xmlhttp.responseText;
var parseV = JSON.parse(json);
$("#somediv").append(parseV);
}
}
答案 1 :(得分:0)
这是由于同一页面上的多个ajax调用(你可以观察到这可能在第一次运行时发生),所以不是解决方案,但你仍然可以通过制作单独的php和html(包含ajax)页面,
答案 2 :(得分:0)
根据w3schools,每onreadystatechange
次更改都会触发readyState
事件。
这意味着在每个请求周期中,使用可能的选项多次调用它:
0: request not initialized
1: server connection established
2: request received
3: processing request
4: request finished and response is ready
所以你需要做的是:
function getActNames() {
if (windows.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
// Called when the request finished successfully and response is ready.
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var json = xmlhttp.responseText;
var parseV = JSON.parse(json);
$("#somediv").append(parseV);
}
}
xmlhttp.open("POST","PHP/actMgmt.php",true);
xmlhttp.send();
}
看到你正在使用jQuery我强烈建议你使用jQuery ajax,如下所示:
$.post("PHP/actMgmt.php", { pram1: "value1" }, function( data ) {
$("#somediv").append(data);
}, "json");
希望这有帮助。