• Как в php формировать ответ на AJAX XMLHttpRequest запрос?

    @vvtrutnev Автор вопроса
    Антон, здравствуйте. Благодарю за участие.
    Но Ваша интуиция согласуется с моей собственной. Ощущение, что стучусь не туда, куда думаю. Но причину не нахожу. Код 200 и запись в консоль XHR finished loading: GET
    Но передо мной этическая проблема - некорректно занимать двух экспертов параллельно.

    Я получил два отзыва на свой запрос. Вы были первый, но в другом меня научили, как надо было делать запрос.
    Кажется всё учёл и вот, что я ответил моему другому помощнику .

    Сказался недостаток habr-опыта. Хотел избавить экспертов от лишних потерь времени.
    Содержание моей работы - динамический сайт для потомков,
    Литературный с элементами квеста.
    В далёком прошлом я - программист. Но за PHP и JS взялся несколько лет назад.
    Стараюсь во всём разбираться сам.
    Но девятый десяток - заставляет спешить, поэтому обращаюсь за помощью
    (третий раз в жизни, то есть я не зануда и не приставала.)

    Вот скрипт, в котором я впервые пытаюсь использовать XMLHttpRequest^

    function choiceposyl(RV, nii0, answL)//Запрос серии посылов из словаря. Редакция 20.04.2024.
    {'use strict'
    bnf = 'fieldheader.choiceposyl. '
    let s = ''
    if(0) { //Ручной запрос посыла для начальной стадии отладки.
    s = prompt(bnf+<?php echo __LINE__;?>+' Запрос посыла вида '+RV+' в строку '+nii0
    +'\nОтвет длины '+answL+' [ Вопрос[Атрибуты[Коммент]]]') }
    else{//Запрос серии посылов для выбора в формируемый расклад.
    const xhr = new XMLHttpRequest();
    requestURL = 'getposyls.php?RV='+"'"+RV+"'"
    xhr.open('GET', requestURL);//f//xhr.open(method, url[, async[, user[, password]]]), true
    xhr.responseType = "text";//ArrayBuffer, Blob, Document, JavaScript Object или DOMString
    xhr.onreadystatechange = function() {//Обработчик на событие readystatechange объекта xhr

    Чувствую, что дело в последоввательности операторов в JS-скрипте. Но никак не нащупаю верную.
    if (xhr.readyState !== 4 || xhr.status !== 200) {
    return
    }//Всё в порядке, ответ получен и его статус равен 200.
    }//onreadystatechange function
    //requestURL произведена из getposyls.php.'async'
    xhr.send(RV);
    const response = xhr.response
    if(1)console.log(bnf+<?php echo __LINE__;?>+'\nОтвет из getposyls.php: '+response);//xhr.
    }//Запрос серии посылов
    /////Выбор одного посыла s из серии сделать отдельной функцией
    return s
    }//choiceposyl

    Вот php-скрипт, от которого жду xhr.response :

    <?php
    print_r($_GET);
    if(isset( $_GET[ 'RV' ])){// Не заходит
    $RV = $_GET[ 'RV' ];
    console.log(__LINE__, " Получен фрагмент регулярного выражения: $RV");
    }
    $response = 'КОД';
    echo $response;
    //return $response; //Пробовал
    //return json_encode($response); //Пробовал
    ?>

    В консоли: fieldheader.choiceposyl. 392
    Ответ из getposyls.php:
    oktotvor.php?rejim=2&mkt=2&username=t_vg_vv&setr=test&ifgr=2:378 XHR finished loading: GET "families/getposyls.php?RV=%27..%D0%94%27".

    В секции Network :
    tposyls.php?RV=%27..%D0%94%27 200 xhr oktotvor.php?rejim=2&mkt=2&username=t_vg_vv&setr=test&ifgr=2:378 772 B 25 ms
    getposyls.php?RV=%27..%D0%94%27 200 xhr oktotvor.php?rejim=2&mkt=2&username=t_vg_vv&setr=test&ifgr=2:378 773 B 88 ms

    Request headers :
    GET /images/cells48/cell01.png HTTP/1.1
    Host: families
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept: image/webp,*/*;q=0.8
    If-None-Match: W/"210-616c3b0d73dc4"
    If-Modified-Since: Tue, 23 Apr 2024 13:40:01 GMT
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36
    Referer: families/oktotvor.php?rejim=2&mkt=2&username=t_vg_...
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: ru,en-US;q=0.8,en;q=0.6
    Cookie: PHPSESSID=1povqth170sf466673vkfs1o73

    Response headers :
    HTTP/1.1 200 OK
    Date: Tue, 23 Apr 2024 14:40:05 GMT
    Server: Apache/2.4.16 (Win32)
    Last-Modified: Tue, 23 Apr 2024 14:40:05 GMT
    ETag: W/"fd-616c487a468cf"
    Accept-Ranges: bytes
    Content-Length: 253
    Keep-Alive: timeout=10, max=99
    Connection: Keep-Alive
    Content-Type: image/png

    Response : // Ничего
    Антон, Владимир Трутнев,
    Написано
  • Почему метод match не работает RegExp включающий JS-переменную?

    @vvtrutnev Автор вопроса
    После Вашего ответа меня просто прорвало. Всё пошло.
  • Почему метод match не работает RegExp включающий JS-переменную?

    @vvtrutnev Автор вопроса
    Нравится - не то слово. Сердечно благодарен!
  • Почему echo и print() выводят пустую строку?

    @vvtrutnev Автор вопроса
    Вы правы. Попробую сформулировать вопрос по-другому.
    Предполагаю, что это как-то связано с настройками XML. Но я с XML ещё не разбирался.
    Потому, что в разных песочницах, но с одинаковыми версиями PHP, я эту ошибку либо получаю, либо не получаю.
    echo '<' . 'кирилица' .>. '
    '; // Ok: < кирилица >
    echo '<' . 'latinitsa' . > . '
    '; // NOk: пустая строка