jQuery的AJAX无法与JSON响应
我从我的PHP文件就像一个JSON响应工作:jQuery的AJAX无法与JSON响应
[
{"id":"1"},
{"archiveitem":"<small>26.06.2015 12:25<\/small><br \/><span class=\"label label-default\">Bug<\/span> has been submitted by Admin"}
]
并尝试获取这种反应到被点击按钮后一个div,但Firebug是告诉我来自错误处理程序的消息。我无法弄清楚问题所在?
$('#loadarchive').click(function(){
$.ajax({
type: 'post',
url: '/src/php/LoadAdminDashboardArchive.php',
dataType: 'json',
data: {
action : 'getArchive'
},
success: function(results) {
var archiveelements = JSON.parse(results);
console.log(results);
$.each(archiveelements, function(){
$('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + this.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + this.archiveitem + '</div>');
});
},
error: function(){
console.log('Cannot retrieve data.');
}
});
});
我能得到它的工作,问题是很简单......
我忘了粘贴“按钮” - 源代码发起Ajax请求。这是一个类型为“submit”的输入,因此在成功检索响应之后默认重新加载页面...所以e.preventDefault();是要走的路。
感谢大家。
如果您再深入一点,可以从控制台获得更多信息。或登录这两个参数:
error: function(xhr, mssg) {
console.log(xhr, mssg);
}
哦,我不知道......它给我:\t 对象{readyState = 0,status = 0,statusText =“error”,mehr ...}错误 – Quhalix89
我试图运行你的代码,我得到
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
通过定义dataType: 'json'
您的结果已经被解析为一个数组。所以,你可以这样做:
success: function (results) {
if (results["head"]["foo"] != 0) {
// do something
} else if (results["head"]["bar"] == 1) {
// do something
}
}
这个作品在我的电脑上:
$.ajax({
type: 'post',
url: '/src/php/LoadAdminDashboardArchive.php',
dataType: 'json',
data: { action : 'getArchive' },
success: function(results) {
console.log(results);
$.each(results, function(){
$('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + this.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + this.archiveitem + '</div>');
});
},
error: function(){
console.log('Cannot retrieve data.');
}
});
首先 你的反应是不正确的,正确的反应应该是这样的
[{
"id":"1",
"archiveitem":"<small>26.06.2015 12:25<\/small>
<br \/><span class=\"labellabel-default\">Bug<\/span> has been submitted by Admin"
},
{
...
}]
秒 你不必解析结果即。 JSON.parse
不是必需的,因为dataType:'json'
可能会照顾json。
最后你成功的方法应该是这样的:
success: function(results) {
$.each(results, function(ind,el){
$('#archivecontent').html('<div class="mark-read-container"><span class="btn-mark-unread" id="' + el.id + '">Unarchive</span></div><div class="bs-callout bs-callout-default">' + el.archiveitem + '</div>');
});
},
好吧,我同意json响应格式不正确,我改变了它,现在是: [{“id”:“1”,“archiveitem”:“ 26.06.2015 12:25
已经提交管理员“}] 我也改变了jquery部分,但错误仍然是一样的... –
Quhalix89
@ Quhalix89使用开发人员工具中的网络选项卡,并检查请求是否返回正确响应 – reverbnation
在firefox开发人员工具中使用网络选项卡时,似乎单击此按钮只会发送一个请求到当前页面而不是我的php-json-response-file – Quhalix89
至于你说的从错误处理消息显示。
这意味着AJAX不会发送到服务器,因为不正确的URL或任何其他原因。
在Firefox中使用Firebug并查看控制台选项卡中的错误。
而且我看到你的代码
dataType: 'json',
data: { action : 'getArchive' },
success: function(results) {
var archiveelements = JSON.parse(results);
}
不要使用JSON.parse(results)
,因为你已经写好dataType: 'json',
和任何类型的响应被自动解析。
如果错误处理程序被击中,则意味着来自服务器的响应不是'200 OK'。这意味着你的'responseURL'位置有错误。事实上,如果'responseURL'是一个变量,你应该删除它周围的引号。 –
此响应的HTTP状态码是什么? – kamituel
哇,这很快:-)我对Firebug不是很熟悉,但它似乎没有给出任何响应... responseURL不是一个变量,它只是/src/php/LoadAdminDashboardArchive.php – Quhalix89