【发布时间】:2010-12-24 05:52:19
【问题描述】:
我有这个 jQuery 代码
(function () {
function load_page (pagename) {
$.ajax({
url: "/backend/index.php/frontend/pull_page/",
type: "POST",
data: {page: pagename},
success: function (json) {
var parsed = $.parseJSON(json);
console.log(parsed);
return parsed;
},
error: function (error) {
$('#content').html('Sorry, there was an error: <br>' + error);
return false;
}
});
}
...
var json = load_page(page);
console.log(json);
if (json == false) {
$('body').fadeIn();
} else {
document.title = json.pagename + ' | The Other Half | freddum.com';
$("#content").html(json.content);
$('#header-navigation-ul a:Contains('+page+')').addClass('nav-selected');
$('body').fadeIn();
}
})();
而且,你猜怎么着,它不起作用。 AJAX 请求触发良好,服务器返回有效 JSON,但 console.log(json); 返回 undefined,当它到达 json.pagename 时 js 崩溃。
第一个console.log(parsed) 也返回了很好的数据,所以这只是return 的问题(我认为)。
我知道我正在抓紧救命稻草,如果这有效,我会非常高兴,但事实并非如此。老实说,我不知道如何针对这种情况编写回调函数。
编辑:这是我现在更新的代码,也不起作用。
function load_page (pagename, callback) {
$.ajax({
url: "/backend/index.php/frontend/pull_page/",
type: "POST",
data: {page: pagename},
success: function (json) {
callback(json);
},
error: function (error) {
$('#content').html('Sorry, there was an error: <br>' + error);
var json = false;
callback(json);
}
});
}
(function () {
$('body').hide();
var page = window.location.hash.slice(1);
if (page == "") page = 'home';
load_page(page, function(json) {
var parsed = $.parseJSON(json);
console.log(parsed);
if (json.pagename == "" || json.pagename == null) {
document.title = 'Page Not Found | The Other Half | freddum.com';
$('body').fadeIn();
} else {
document.title = parsed.pagename + ' | The Other Half | freddum.com';
$("#content").html(parsed.content);
$('#header-navigation-ul a:Contains('+page+')').addClass('nav-selected');
$('body').fadeIn();
}
});
})();
我将 load_page 移动到全局命名空间中,因为我需要它在那里。 console.log(parsed) 返回似乎是有效的 json 对象,但 console.log(parsed.content) 产生 undefined。 #content 也没有设置。有任何想法吗?我很乐意做任何测试。
非常感谢任何帮助!
【问题讨论】:
标签: javascript jquery ajax json callback