我无法将json对象从我的php传递给我的jquery

时间:2018-04-03 21:05:57

标签: javascript php jquery json

我试图将我的test.php中的json对象传递给index.html中的jquery,但我不能。 这是我的test.php脚本:

<?php
if(isset($_POST["view"]))
{
  $output .= '
  <li><a href="#" class="text-bold text-italic">No Notification Found</a></li>
  ';
  $total_row=2;

 $data = array(
   'notification'   => $output,
   'unseen_notification' => $total_row
  );


 echo json_encode($data);
}
?>

这是我的jquery脚本,“js中的警告显示未定义为结果”:

function load_unseen_notification(view = '')
 { 

  $.ajax({
   url:"test.php",
   method:"POST",
   data:{view:view},
   dataType:"json",
   complete:function(data)
   {
    alert(data.notification);
    $('.dropdown-menu').html(data.notification);

    if(data.unseen_notification > 0)
    {
     $('.count').html(data.unseen_notification);
    }
   }
  })
 }

3 个答案:

答案 0 :(得分:3)

在PHP中,您需要从服务器添加标头响应,以便浏览器知道响应中的内容(请参阅:https://www.iana.org/assignments/media-types/media-types.xhtmlhttp://php.net/manual/en/function.header.php):< / p>

<?php
    header("Content-Type: application/json");

在JavaScript中,您需要使用 success 事件:

$.ajax({
    url: "test.php",
    method: "POST",
    data: {
        view: 10
    },
    dataType: "json",
    success: function(data) {
        alert(data.notification);
    }
});
  • success - 请求成功时要调用的函数。 参数:( Anything data, String textStatus, jqXHR jqXHR )
  • complete - 请求完成时要调用的函数(执行成功和错误回调后)。 参数:( jqXHR jqXHR, String textStatus )

文档:http://api.jquery.com/jquery.ajax/

如果要使用 complete ,则可以通过 jqXHR Object 获取对数据的访问权限(请参阅:http://api.jquery.com/jQuery.ajax/#jqXHR) :

complete: function(jqXHR) {
    if (typeof jqXHR.responseJSON !== 'undefined') {
        alert(jqXHR.responseJSON.notification);
    }
}

当然,如果有必要,可以组合不同的事件处理程序。

P.S。要进行调试,请使用 console.log(data) 而不是 alert(data) ,并浏览浏览器中的日志。例如,对于Google Chorme(F12,标签:日志):https://developers.google.com/web/tools/chrome-devtools/console/get-started

答案 1 :(得分:1)

将内容类型标题设置在PHP脚本的顶部也是一个好主意:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.2/jquery.flot.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.2/jquery.flot.time.min.js"></script>
<div id="alertTrend_Canvas" style="height: 300px;"></div>

jQuery可能会将正文解释为JSON而不是&#39; text&#39;。

答案 2 :(得分:0)

我将$ .trim()添加到我的data.responseText,最后它正在工作(我不知道为什么:))

var obj = JSON.parse($.trim(data.responseText));
$('.dropdown-menu').html(obj.notification);

对你们所有人来说很有帮助