在javascript ajax请求中获取特定的数组键

在javascript ajax请求中获取特定的数组键,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我希望每5秒运行一次以下ajax请求。为了测试它,我只设置了几个警报。我设置了一个警报('hello')内成功,每5秒触发一次。这样就行了 不起作用的是if(response.update==true){部分 我正在准备 ajaxurl文件中的 我做错了什么吗?这是一个错误的方法吗?我错过了什么吗 我甚至尝试在ajax中设置datatype:json,并在ajax url中返回returnJSON\u encode($data);,但都没有成功 代码 $(文档).ready(函数(){ /*对

我希望每5秒运行一次以下ajax请求。为了测试它,我只设置了几个警报。我设置了一个
警报('hello')内成功,每5秒触发一次。这样就行了

不起作用的是
if(response.update==true){
部分

我正在准备

ajaxurl文件中的

我做错了什么吗?这是一个错误的方法吗?我错过了什么吗

我甚至尝试在ajax中设置
datatype:json,
并在ajax url中返回
returnJSON\u encode($data);
,但都没有成功

代码

$(文档).ready(函数(){
/*对检查器的AJAX请求*/
设定间隔(
函数(){
$.ajax({
键入:“POST”,
url:“”,
数据类型:html,
数据:{计数器:10},
成功:功能(响应){
if(response.update==true){
警惕(“是”);
}
}
})
},5000);
});


编辑 控制台日志现在正在报告json响应。但是
if(response.update==“true”){alert('yes');}
仍然不起作用


console.log响应:
{“update”:“true”}
和它应该每5秒更新一次。

这里有两件事情看起来不正确。首先

<?php $data['update'] = "true"; return $data; ?>

如果这是您返回数据的方式,那么这不是返回json。您需要将关联数组编码为json并将其回显到标准输出

<?php $data['update'] = "true"; echo json_encode($data); ?>

一旦有了这些,就可以让ajax请求预期响应为json

$.ajax({
  type: 'POST',
  url: '<?php echo http() . $websitedomain .'/Manage/order_management/search_orders_checker.php'; ?>',
  //dataType tells ajax to auto-parse the json response into an object
  dataType: 'json', 
  data: { counter:10 },
  success: function(response){ 
    if(response.update==true){
      alert('yes');
    }
  }
})
$.ajax({
键入:“POST”,
url:“”,
//数据类型告诉ajax自动将json响应解析为对象
数据类型:“json”,
数据:{计数器:10},
成功:功能(响应){
if(response.update==true){
警惕(“是”);
}
}
})

以下是使其正常工作所需的所有事项:

1) PHP:

你需要

  • 将数据编码为JSON
  • 将数据回显到脚本的输出中,而不是返回到PHP中的某个地方
  • 在“更新”字段中返回布尔值
    true
    ,而不是字符串
    “true”
以下是这方面的新代码:

<?php 
  $data['update'] = true; 
  echo json_encode($data); 
?>

2) JavaScript:

您需要将
数据类型:html
更改为
数据类型:“json”

这是因为

  • JS变量区分大小写,因此jQuery无法识别 名为“数据类型”的选项
  • 值“json”必须是string(在使用
    html
    之前),它实际上是对不存在的变量的引用
  • 指定“json”会告诉jQuery自动将响应解析为json,这意味着您不必自己调用
    json.parse()
    在回调中

您是否在服务器上设置
内容类型
标题?编辑:我应该说,这是一个简单的问题。您确实需要提供1)相关的服务器代码,以及2)一个示例响应,包括标题,以便能够进行任何实际的诊断。我不认为我需要控制台。日志(响应)并告诉我们您得到了什么。另外,如果您想返回布尔值,则
$data['update']=true
(即不带引号的回合
true
)更正确-那么它在PHP中也是一个布尔值。由于这两种语言的键入能力都很弱,您可能不会受到影响,但如果可以的话,最好更准确。您还应该学习如何使用浏览器的网络工具来监视HTTP请求(包括AJAX请求)看看它们里面有什么数据,返回了什么状态,设置了什么标题等等。这使调试它们变得容易了100倍。如果你读了文本,我说我甚至试着设置json并返回json_encode($data)这不起作用。我已经尝试返回html和json。但是我尝试了一些建议,看看它们是否能解决这个问题。如果你做了这个答案中的事情,但没有成功地得到响应,那么就会发生一些不明显的其他问题。你是否
console.log(response)
查看您得到了什么?@Taplar
return
本身不会在响应中反映任何内容。这可能是问题所在。我们无法看到足够的PHP IMO。KDJ可以通过发布更多代码和/或使用建议的控制台轻松确认这一点。log@ADyson“噢,斯纳普,这是真的!”艾迪森-你真厉害。回归才是问题所在,爸爸现在,控制台日志报告{“update”:true}每5秒钟一次;但是,成功函数警报不会在
响应内触发。更新==true
我不知道为什么会有人对此投反对票。如果他们花时间通读这期间发生的所有事情,他们会看到你在整个过程中都提供了帮助,这是一次重述。无论如何,谢谢你的帮助!或者这是因为我没有接受“另一个”的答案,也没有完全解决问题。不管怎样……这就是问题所在。因为突然我的问题也被否决了……哈哈
<?php 
  $data['update'] = true; 
  echo json_encode($data); 
?>