У меня есть этот код 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
, и js вылетает при достижении json.pagename
.Первый console.log(parsed)
также возвращает хорошие данные, так что это просто проблема с return
(я думаю).
Я знал, что цепляюсь за соломинку, и было бы чрезвычайно, если бы это работало, но это не так.Если честно, я не знаю, как запрограммировать функции обратного вызова для этой ситуации.
EDIT : Это мой теперь обновленный код, который тоже не работает.
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
тоже не устанавливается.Есть идеи?Я буду рад провести любое тестирование.
Любая помощь очень ценится!