Javascript 返回重复项的JSON

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页面时,它只会像我预期的那

当我试图从数据库中提取数据时,我的javascript会返回JSON两次为什么我的JSON会以这种方式返回?

PHP:

我通过以下方式在HTML中调用它:

<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帮你省去了头痛:)