我试图将我的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);
}
}
})
}
答案 0 :(得分:3)
在PHP中,您需要从服务器添加标头响应,以便浏览器知道响应中的内容(请参阅:https://www.iana.org/assignments/media-types/media-types.xhtml,http://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);
对你们所有人来说很有帮助