Вызов Wordpress ajax восстанавливает html страницы

Я получаю данные из таблицы 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);

Возможно, в возвращаемом HTML есть сообщение об ошибке?

Patrick Q 13.06.2019 23:06

@PatrickQ нет ошибки, которую показывают результаты, но вместе со всем html страницы

Tayyab Gulsher Vohra 13.06.2019 23:09

Итак, вы на самом деле просмотрели этот HTML-код построчно, чтобы убедиться, что в нем нет сообщения об ошибке в пределах HTML?

Patrick Q 13.06.2019 23:12

да, когда я также добавил html в div

Tayyab Gulsher Vohra 13.06.2019 23:14

@PatrickQ Я думаю, что у меня проблема с моим вызовом ajax, когда я просто использую эхо «результат» в ajax.php, он возвращает всю страницу

Tayyab Gulsher Vohra 13.06.2019 23:28

Нужно будет увидеть HTML, чтобы увидеть, для чего нужны значения, когда вы делаете вызовы $(this).data('url') или $(this).data('page') и является ли ajaxurl исходящим из wp_localize_script() вызов? Я не думаю, что механизм WP Ajax является глобальным по умолчанию.

JDev518 13.06.2019 23:42

Также следует передать конечную точку 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' ))

JDev518 13.06.2019 23:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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)) и/или откройте сам журнал ошибок и посмотрите, что он говорит.

prieber 13.06.2019 23:43
die в конце на самом деле рекомендуется WP - чтобы убедиться, что вызов завершен, как только ответ будет отправлен обратно. wp_die(), die(), exit, exit() все работает
JDev518 13.06.2019 23:48

@prieber показывает мне html страницы отправки запроса в ответе

Tayyab Gulsher Vohra 13.06.2019 23:51

Вы можете быть правы, но почти все, что Wordpress делает и предлагает в качестве хорошей практики, абсолютно неправильно, включая это. Других строк после echo нет, что мы беспокоимся о выполнении?

prieber 13.06.2019 23:52

@TayyabGulsherVohra, какова ценность $(this).data('url');?

prieber 13.06.2019 23:53

Я думаю, это из-за системы хуков, нет гарантии, что что-то еще не будет запущено/вызвано

JDev518 13.06.2019 23:54

Согласно @TayyabGulsherVohra, нам нужно знать, что такое $(this).data('url'). Если он не указывает на действие WP Ajax, это объясняет, почему вы возвращаете HTML. Это должен быть admin-ajax.php для вызова wp_localize_script, который я упомянул в своем последнем комментарии к вопросу.

JDev518 13.06.2019 23:57

@ JDev518 дает неопределенность

Tayyab Gulsher Vohra 13.06.2019 23:58

@prieberit дает неопределенность

Tayyab Gulsher Vohra 13.06.2019 23:59

@TayyabGulsherVohra, вероятно, тогда просто используется текущий URL. Убедитесь, что он заполняется, либо установив его в HTML, либо изменив его в js на что-то вроде var ajaxurl = "my-cool-endpoint".

prieber 14.06.2019 00:00

@TayyabGulsherVohra Отлично, я обновлю свой ответ.

prieber 14.06.2019 00:05

Другие вопросы по теме