Javascript 返回重复项的JSON
当我试图从数据库中提取数据时,我的javascript会返回JSON两次为什么我的JSON会以这种方式返回? PHP: 我通过以下方式在HTML中调用它:Javascript 返回重复项的JSON,javascript,php,jquery,html,Javascript,Php,Jquery,Html,当我试图从数据库中提取数据时,我的javascript会返回JSON两次为什么我的JSON会以这种方式返回? PHP: 我通过以下方式在HTML中调用它: <p class = "button" onclick= "getActNames();return false;">Some Button </p> 我得到: ["act1,"act2","act3"]["act1","act2","act3"] 好像每次都叫两次 另外,当我刚转到PHP页面时,它只会像我预期的那
<p class = "button" onclick= "getActNames();return false;">Some Button </p>
我得到:
["act1,"act2","act3"]["act1","act2","act3"]
好像每次都叫两次
另外,当我刚转到PHP页面时,它只会像我预期的那样返回以下内容:
["act1","act2","act3"]
**编辑
变量转储($name)输出:
数组(6)=>{[0]=>string(4)“act1”[1]=>string(4)“act2”[2]=>string(4)“act3”}
**编辑
log(xmlhttp.responseText)提供了:
JSON.parse: unexpected end of data
["act1","act2","act3"]
这是由于同一页面上有多个ajax调用(您可以观察到,这可能发生在第一次运行时),因此这不是一个解决方案,但您仍然可以通过创建单独的php和html(包含ajax)页面来逃避当前场景,这是由于同一页面上有多个ajax调用(您可以观察到,这可能发生在第一次运行时),因此,这不是一个解决方案,但您仍然可以通过创建单独的php和html(包含ajax)页面来摆脱当前场景,我现在看到了。在未来,我强烈建议您使用类似的框架来避免这种情况。编写自己的AJAX函数往往会导致类似这样的问题。 您的AJAX调用没有检查正确的状态。它只是在寻找任何回报。因此,每次你收到一个数据包,它就会启动你的匿名函数 将代码更改为此,您应该只获得一个数组
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var json = xmlhttp.responseText;
var parseV = JSON.parse(json);
$("#somediv").append(parseV);
}
}
我现在看到了。在未来,我强烈建议您使用类似的框架来避免这种情况。编写自己的AJAX函数往往会导致类似这样的问题。 您的AJAX调用没有检查正确的状态。它只是在寻找任何回报。因此,每次你收到一个数据包,它就会启动你的匿名函数 将代码更改为此,您应该只获得一个数组
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var json = xmlhttp.responseText;
var parseV = JSON.parse(json);
$("#somediv").append(parseV);
}
}
根据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");
希望这有帮助。根据每次readyState
更改时都会触发onreadystatechange
事件
这意味着在每个请求周期中,它会被多次调用,并具有以下可能的选项:
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");
希望这能有所帮助。此表中的所有文章都是该列的唯一文章。您能
var\u dump($name)
并输出该内容吗?嘿,Shivanshu,谢谢您提供的信息,但我已经有了单独的页面。使用javascript作为获取数据的PHP页面和显示数据的HTML页面之间的中间层。将var_dump添加到问题中。您还可以在此处显示console.log(xmlhttp.responseText)ans吗?此表中的所有文章对于该列都是唯一的。您可以var_dump($name)
并输出它吗?嘿,Shivanshu,谢谢你的信息,但我已经有了单独的页面。使用javascript作为获取数据的PHP页面和显示数据的HTML页面之间的中间层。向问题添加了var_dump。您还可以在此处显示console.log(xmlhttp.responseText)ans吗?您能告诉我在哪里进行重复调用吗?我已经检查过了,在我的脚本中没有其他JS函数调用它。故意不调用,这是默认的!获得单一结果的最佳方法是什么?正如我前面所说的,只需在单独的页面上编写ajax+html代码,在单独的页面上编写php代码,至少可以尝试一下!我有一个html页面、一个单独的JS脚本文件和一个单独的PHP文件。这就是你的意思吗?你能告诉我我在哪里重复打电话吗?我已经检查过了,在我的脚本中没有其他JS函数调用它。故意不调用,这是默认的!获得单一结果的最佳方法是什么?正如我前面所说的,只需在单独的页面上编写ajax+html代码,在单独的页面上编写php代码,至少可以尝试一下!我有一个html页面、一个单独的JS脚本文件和一个单独的PHP文件。你是这个意思吗?嘿,试试看。相同的结果。编辑的响应。我打赌这会解决问题哇,我还没有JS那么好,但我知道我应该包括这一点。我想这是个新动作。谢谢你的帮助!这是我推荐jQuery的一个主要原因。我讨厌这样写我自己的电话。JQ帮你省去了头痛:)嘿,试试看。相同的结果。编辑的响应。我打赌这会解决问题哇,我还没有JS那么好,但我知道我应该包括这一点。我想这是个新动作。谢谢你的帮助!这是我推荐jQuery的一个主要原因。我讨厌这样写我自己的电话。JQ帮你省去了头痛:)