Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jQuery Ajax JSON返回单变量加多维数组_Php_Jquery_Json_Ajax - Fatal编程技术网

Php jQuery Ajax JSON返回单变量加多维数组

Php jQuery Ajax JSON返回单变量加多维数组,php,jquery,json,ajax,Php,Jquery,Json,Ajax,注:该问题已被否决三次,但没有人提供否决的理由。这对任何人都没有帮助 社区。不要让这件事阻碍了你的答案 阿努拉格和菲尔都在下面 我正在使用Ajax、json检索数据。数据库可能不返回结果、一条记录或多条记录。我需要知道接收数据时的行数。如果只有一行,它将简单地填写表单。如果有多行,则会将用户定向到列表以进行选择 为了更详细地解释,行数存储在PHP文件中的$rows变量中,该变量来自查询结果,无需显示。有一个查询,这是它后面的代码。换句话说,我需要知道的是如何将$Rows变量与多维数组一起发送回j

注:该问题已被否决三次,但没有人提供否决的理由。这对任何人都没有帮助 社区。不要让这件事阻碍了你的答案 阿努拉格和菲尔都在下面

我正在使用Ajax、json检索数据。数据库可能不返回结果、一条记录或多条记录。我需要知道接收数据时的行数。如果只有一行,它将简单地填写表单。如果有多行,则会将用户定向到列表以进行选择

为了更详细地解释,行数存储在PHP文件中的$rows变量中,该变量来自查询结果,无需显示。有一个查询,这是它后面的代码。换句话说,我需要知道的是如何将$Rows变量与多维数组一起发送回jQuery函数。如果仍然无法理解,请参阅这些特定部分中的评论

基本上,在查询之后,我的PHP如下所示:

$Rows = mysql_num_rows($Result);
if($Rows == 1)
{
    $P = mysql_fetch_assoc($Result);
    $Output = json_encode($P);
}
elseif($Rows > 1)
{
    $x = 0;
    while($ProgRow = mysql_fetch_array($Result))
    {
        // Of course, I could add the $Row var here, but I would need
        // To add it to each row, which seems a little daffy
        $P[$x]['ID'] = $ProgRow['ID'];
        $P[$x]['ProgCode'] = $ProgRow['ProgCode'];
        $P[$x]['ProgName'] = $ProgRow['ProgName'];
        $x++;
    }
    $Output = json_encode($P);
}
else
{
    $P = json_encode(0);
    $Output = $P;
}
echo($Output);
下面是jQuery:

$.ajax(
{
   type: 'POST',
   url: 'scripts/UtilAjax.php',
   data: 'Sec=EditPrograms',
   dataType: 'json',
   success: function(data,status)
   {
      // ideally what needs to happen here is to be able to
      // return the $Rows variable as well, to determine how
      // To deal with the return data.
      console.log(status);
      console.log(data.ID+' '+data.ProgCode+' '+data.ProgName);
   }
});

如果我不确定这是否是您想要的,但根据我的理解,您希望在ajax中获得$row数据和$output数据。在这种情况下,只需在json编码的关联数组中发回这两个

echo json_encode([$rows, $Output]);
最后,在客户端

success: function(data, status) {
  console.log("Output: " + data.Output.ID + ' ' + data.Output.ProgCode + ' ' + data.Output.ProgName);
  if (data.rows == 0) {
    // do something ...
  } else if (data.rows == 1) {
    // populate the form
    console.log(data.output.ID + ' ' + data.output.ProgCode + ' ' + data.output.ProgName);
  } else {
    // multiple rows
    // display the select list
  }
}

正如评论中提到的,只需返回一个结果数组,不管有多少个结果。这使您的API保持一致,并减少代码

比如说

$out=[];//从空数组开始 而$ProgRow=mysql\u fetch\u array$Result{ $out[]=$ProgRow;//推送到数组上 } 标题'Content-type:application/json'; echo json_编码$out; 出口 现在,您的结果将始终是一个包含零个或多个记录的数组。然后,JS可以简单地检查长度,以确定有多少个结果

$.post'scripts/UtilAjax.php'{ 第二节:“编辑程序” }.thendata=>{ console.log“结果数:”,data.length switchdata.length{ 案例0: //不处理任何记录 打破 案例1: fillOutFormdata[0]//使用第一条记录 打破 违约: 显示列表数据 } } 为了让jQuery知道响应是JSON,您应该如上所述添加正确的内容类型响应头,或者强制通过

$.post('scripts/UtilAjax.php', {
   Sec: 'EditPrograms'
}, null, 'json').then(data => ...)


$ProgRow[ProgCode];你必须用引文附上钥匙。对于一个与问题无关的例子来说,这是相当轻微的批评。你是降级我的人吗?解决方案并不复杂……总是发送一个数组并检查它的长度。对于没有结果发送空数组首先,如果你指的是我,我没有降级你,如果你也指的是我,我的评论不是批评。我只是想指出你可能遗漏了什么,也许你可以从那开始。当行数>1时,你不会创建关联数组,所以不要在其他条件下使用var stuff=json.parsedata;console.logstuff;给我一个json,因为某些原因没有定义。有什么想法吗?使用JSON而不是jsonWith dataType:JSON,数据将已经被解析。它不需要再次解析,这很好,因为我在尝试使用它时遇到了语法错误,而且数据对我来说似乎没有问题。哦,我想这是jquery的问题。我没注意到。啊-我想知道如何得到多维数据的长度,但是,正如你在案例结构中指出的,这真的没有必要。似乎无论有多大的嵌套,length都应该返回顶级数组的数量,但是,除非我在某个地方搞砸了,否则它似乎不会。我喜欢这样,我接受了Anurag的答案,因为在我看到你的答案之前,我已经让它工作了,在尝试你的答案时,我发现JavaScript长度函数有问题。不知道为什么。不过,这看起来像是一些非常有效的代码,所以我将继续尝试找出我做错了什么。根本不理解data.length问题。在1记录22字段响应中,它显示的长度为512。这可能是字符数,也可能不是。不过,数据很好。@RationalRabbit您是否在PHP中添加了标题“Content-type:application/json”部分?512可能是JSON字符串的长度。您得到一个字符串,因为jQuery不知道它是JSON
$.ajax({
  url: 'scripts/UtilAjax.php',
  method: 'POST',
  data: {Sec: 'EditPrograms'},
  dataType: 'json'
}).then(data => ...)