2012-02-26 8 views
4

Это для мобильного приложения jQuery, использующего версию 1.0.1.

Я пытаюсь получить данные из моего файла getmovies.php, который выводит JSON, для использования в функции jQuery, которая добавляет данные в неупорядоченный список на моей HTML-странице.

Моя страница HTML отображается правильно, но функция getMoviesList() не добавляет элементы списка, поэтому область содержимого остается пустой.

Я предполагаю, что с моей функцией $ .each() есть что-то не так. Мне больше нравится PHP, но я стараюсь лучше познакомиться с jQuery и JSON для перемещения данных в приложениях jQuery Mobile.

getmovies.php выходы JSON следующим образом:

{"items":[ 
{"movieID":"65086","title":"The Woman in Black","poster":"\/kArMj2qsOnpxBCpSa3RQ0XemUiX.jpg"}, 
{"movieID":"76726","title":"Chronicle","poster":"\/853mMoSc5d6CH8uAV9Yq0iHfjor.jpg"} 
]} 

Мой Javascript выглядит следующим образом:

var serviceURL = "http://mydomain.com/app3/services/"; 

var movies; 

$('#moviesPage').bind('pageinit', function(event) { 
    getMoviesList(); 
}); 

function getMoviesList() { 
    $.getJSON(serviceURL + 'getmovies.php', function(data) { 
    $('#moviesList li').remove(); 
    movies = data.items; 
    $.each(movies, function(index, movie) { 
     $('#moviesList').append('<li><a href="movie-details.html?movieID=' + movie.movieID + '">' + 
     '<img src="posters/' + movie.poster + '"/>' + 
     '<h4>' + movie.title + '</h4>' + 
     '<p>Other details...</p>' + 
     '</a></li>'); 
    }); 
    $('#movieList').listview('refresh'); 
    }); 
} 

Мой HTML выглядит следующим образом:

<div id="moviesPage" data-role="page"> 

    <div data-role="content"> 

    <ul id="moviesList" data-role="listview" data-filter="true"></ul> 

    </div><!-- /content --> 

</div><!-- /page --> 

Я пытаюсь изменить следующее примерное приложение для удовлетворения моих потребностей: http://coenraets.org/blog/2011/10/sample-application-with-jquery-mobile-and-phonegap/.

Спасибо за любую помощь, которую вы можете предложить.

+0

Получаете ли вы данные при запуске консоли.log (фильм) 'в первой строке каждого? –

+0

@Adam Спасибо за ваш комментарий. На самом деле я не уверен, как использовать 'console.log()'. Я работаю с моими файлами в своем редакторе кода и загружаю их на свой сервер для тестирования. –

+1

Добавьте эту строку, а затем, когда вы запустите страницу, используйте http://getfirebug.com/ для просмотра данных и ошибок javascript или отправьте мне ссылку –

ответ

1

Проверьте, если ваш выход JSON справедливо: проверить здесь jsonlint.com

Изменить событие связано с этим и посмотреть, если он работает.

$('#moviesPage').bind('pageinit', function(event) { 
    getMoviesList(); 
}); 

этому

$('#moviesPage').live('pageshow', function(event) { //or 'pagecreate' 
    getMoviesList(); 
}); 

Как я могу видеть, остальная часть JS кода в порядке! Попробуйте это и посмотрите, работает ли он. Как я знаю, это должно быть! Это метод, который я использую в своем мобильном приложении и работает очень хорошо.

+0

Спасибо, это работает. Знаете ли вы, как заставить listview заполнять данные перед загрузкой страницы? В настоящее время я использую 'pagebeforecreate', но на странице есть анимация загрузки по умолчанию до изменения страницы, но затем страница пусто, пока не будут получены данные listview.Я хотел бы, чтобы список был заполнен, как только завершилась анимация загрузки по умолчанию по умолчанию. –

+0

Также спасибо за ссылку jsonlint.com. –

+0

Вы можете попробовать поставить символ загрузки при запуске живого события. $ .mobile.showPageLoadingMsg(); "a затем спрячьте его после вызова json с помощью «$ .mobile.hidePageLoadingMsg();». Таким образом, по крайней мере, когда ваши данные загружаются, отображается символ загрузки. – aki

1

С помощью Адама я смог сузить проблему.

Если вы используете «Образец приложения с использованием jQuery Mobile и PhoneGap» Кристофа Коэнрейца (http://coenraets.org/blog/2011/10/sample-application-with-jquery-mobile-and-phonegap/) и с помощью JQuery Mobile выше, чем 1.0rc1, вам, возможно, потребуется заменить следующий код в JavaScript из:

$('#employeeListPage').bind('pageinit', function(event) { getEmployeeList(); }); 

к:

$(document).delegate("#employeeListPage", "pageinit", function() { getEmployeeList(); }); 

причина этого объясняется в JQuery Мобильные документы по следующей ссылке: страница C reate = DOM ready: http: //jquerymobile.com/demos/1.0.1/docs/pages/page-scripting.html.

Я надеюсь, что это поможет любому, кто сталкивается с тем же вопросом, пытаясь использовать это замечательное приложение-образец.

+0

1.2.0 документация http://jquerymobile.com/demos/1.2.0/docs/api/events.html – JamesC

Смежные вопросы