JSON 返回重复项
JSON returning duplicates
当我尝试从数据库中提取数据时,我的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 倍。SO 而不是得到以下内容:
["act1","act2","act3"]
我得到:
["act1,"act2","act3"]["act1","act2","act3"]
似乎每次,它都叫了两次。
另外,当我只是转到PHP页面时,它只像我期望的那样返回以下内容:
["act1","act2","act3"]
**编辑
var_dump($name) 输出: array(6)=>{ [0]=>string(4)"act1" [1]=> string(4)"act2" [2]=> string(4)"act3"}
**编辑
console.log(xmlhttp.responseText) 给了我:
JSON.parse: unexpected end of data
["act1","act2","act3"]
我现在看到了。将来,我强烈建议您使用像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);
}
}
这是由于同一页面上有多个 ajax 调用(您可以观察到这种情况可能会在第一次运行时发生),所以不是解决方案,但您仍然可以通过制作单独的 php 和 html(包含 ajax)页面来摆脱当前场景,
根据W3Schools的说法,每次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");
希望这有帮助。
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 返回JSON中的下标
- jQuery Map 从多个源返回 JSON 对象
- 如何在 Node.js 中返回 JSON 后停止代码流
- AngularJS:表单提交没有返回JSON中的值
- 使用ajax发送数据,返回json
- 从我的解析函数返回json
- 如何从脚本页面返回json数据
- 有些人有任何关于如何使用Modified Java Script Value处理返回Json(url)的示例
- 如何在html页面中从ajax返回json数据
- Ajax调用在本地返回json,但在服务器上运行时返回xml
- ajax调用返回JSON ParseError即使认为JSON看起来是正确的
- 调用.ajax方法得到未定义的json结果,返回json格式列表<字符串>
- 如何通过C#返回JSON并用JavaScript进行解析
- 使用 AJAX 返回 json 数组
- 从 AJAX 命令返回 JSON 格式的响应
- 如何通过node中的请求返回JSON.js(从javascript)
- Node.js API 在终端中返回 JSON,但不在浏览器中返回 JSON
- 如何在支柱 2 中返回 JSON 数组
- Rhino:从 Java 中返回 JSON