Я получаю данные из таблицы sql и сохраняю результаты внутри ассоциативного массива после того, как я закодировал их в json, но проблема в том, что он возвращает html страницы вместе с результатами
это мой php-код
<?php
add_action('wp_ajax_nopriv_my_loadmore','my_loadmore');
add_action('wp_ajax_my_loadmore','my_loadmore');
function my_loadmore(){
global $wpdb;
$table_name = "wpnn_tweets";
$paged=$_POST['page'];
$page=$paged*10;
$results = $wpdb->get_results("SELECT * FROM $table_name LIMIT 1 OFFSET $page");
$arr = array();
foreach($results as $row){
$arr['userScreen']=$row->userScreen;
$arr['userName']=$row->userName;
$arr['tweetCreated']=$row->tweetCreated;
$arr['tweetText']=$row->tweetText;
$arr['tweetRetweetCt']=$row->tweetRetweetCt;
$arr['tweetFavoriteCt']=$row->tweetFavoriteCt;
}
echo json_encode($arr);
wp_die();
}
?>
вот как я получаю json в интерфейсе
$ = jQuery;
function scroller() {
if ($(window).scrollTop() + $(window).height() > $(document).height() - 200) {
$(this).off("scroll.ajax");
var page=parseInt($(this).data('page'));
var ajaxurl=$(this).data('url');
$.ajax({
url:ajaxurl,
type:"POST",
data:{
page:page,
action:"my_loadmore"
},
error:function(response){
console.info("error");
},
success:function(data){
for(i = 0; i < data.length; i++) {
console.info(data[i]);
}
}
});
}
}
$(window).on("scroll.ajax", scroller);
@PatrickQ нет ошибки, которую показывают результаты, но вместе со всем html страницы
Итак, вы на самом деле просмотрели этот HTML-код построчно, чтобы убедиться, что в нем нет сообщения об ошибке в пределах HTML?
да, когда я также добавил html в div
@PatrickQ Я думаю, что у меня проблема с моим вызовом ajax, когда я просто использую эхо «результат» в ajax.php, он возвращает всю страницу
Нужно будет увидеть HTML, чтобы увидеть, для чего нужны значения, когда вы делаете вызовы $(this).data('url') или $(this).data('page') и является ли ajaxurl исходящим из wp_localize_script() вызов? Я не думаю, что механизм WP Ajax является глобальным по умолчанию.
Также следует передать конечную точку ajax с помощью wp_localize_script, чтобы получить то, что хочет WP. Лайкните wp_enqueue_script('my_script', 'somescript.js; ...)
тогда wp_localize_script('my_script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ))
var ajaxurl = $(this).data('url');
Это возвращает null, если вы явно не установили его в своем HTML. Самое простое решение — заменить его чем-то вроде следующего.
var ajaxurl = 'my-cool-endpoint';
Это не было решением этой конкретной проблемы, но я считаю, что было бы неплохо проверить, не заходят ли другие на эту страницу с той же проблемой. Замените wp_die()
на die()
. См. документацию для более подробной информации, но вот соответствующая строка.
A call to this function complements the die() PHP function. The difference is that HTML will be displayed to the user in the case of a typical web request.
Ну вообще не нужно die()
. Собираюсь повторить утверждения других и предложить вам получить страницу с ошибкой в качестве ответа. Сбросьте свои данные в журнал ошибок (например, error_log($arr)
) и/или откройте сам журнал ошибок и посмотрите, что он говорит.
die
в конце на самом деле рекомендуется WP - чтобы убедиться, что вызов завершен, как только ответ будет отправлен обратно. wp_die(), die(), exit, exit()
все работает
@prieber показывает мне html страницы отправки запроса в ответе
Вы можете быть правы, но почти все, что Wordpress делает и предлагает в качестве хорошей практики, абсолютно неправильно, включая это. Других строк после echo
нет, что мы беспокоимся о выполнении?
@TayyabGulsherVohra, какова ценность $(this).data('url');
?
Я думаю, это из-за системы хуков, нет гарантии, что что-то еще не будет запущено/вызвано
Согласно @TayyabGulsherVohra, нам нужно знать, что такое $(this).data('url')
. Если он не указывает на действие WP Ajax, это объясняет, почему вы возвращаете HTML. Это должен быть admin-ajax.php для вызова wp_localize_script
, который я упомянул в своем последнем комментарии к вопросу.
@ JDev518 дает неопределенность
@prieberit дает неопределенность
@TayyabGulsherVohra, вероятно, тогда просто используется текущий URL. Убедитесь, что он заполняется, либо установив его в HTML, либо изменив его в js на что-то вроде var ajaxurl = "my-cool-endpoint"
.
@TayyabGulsherVohra Отлично, я обновлю свой ответ.
Возможно, в возвращаемом HTML есть сообщение об ошибке?