Задать вопрос
@hoax007

Почему не получается обратиться к наследуемому свойству (php) через асинхронный запрос?

У меня есть файл-обработчик для POST/GET. Его я открываю при AJAX запросе (прямо указываю в fetch). Когда формирую в обработчике ответ в виде JSON пытаюсь вставить в него данные из наследуемого с родительского класса свойства. Например

обработчик

include $_SERVER['DOCUMENT_ROOT'].'/model.php';

class Handler extends Model {

...
foreach($stmt as $row) {
$t=[];
$t['link'] = $row['link'];
$t['region'] = $row['region'];
$t['parentProp'] = $this->parentProp; // вот оно
$data[] = $t; 

 }
echo json_encode($data);
}


Родительский класс выглядит так

class Model {

public $parentProp= array('one','two');


}


Все работало до тех пор, пока я решил не изменить parentProp, добавив в него другие значения. Но ничего не поменялось, он возвращал по-прежнему array('one','two'); Тогда я создал новое свойство и обратился к нему, но получил на выходе null будто его не существует. Я также выводил свойство минуя цикл напрямую echo json_encode($this->parentProp;) Всё тоже самое. Причем когда я выводил свойство чисто средствами php все было правильно. проблему вижу именно в ajax, но там ничего особенного :

let f = await fetch(url, {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json;charset=utf-8'
          },
          body: JSON.stringify(data),
        
    });


Я почистил кэш браузера, в body fetch указывал no-cache,no-store но ничего не работало.

Суть в том, что не получается обратиться к свойствам родительского класса (именно при ajax), я получаю ошибку что такого свойства нет, хотя я инклудил родителя и подключение к БД (которое там прописано в конструкторе) происходило. В памяти, как я понимаю, лежит только $parentProp и даже если я его удаляю в Model, обработчик по $this->parentProp все равно возвращает первоначальные значения (как это возможно??).

Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12
  • Вопрос задан
  • 314 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Вопрос "как обратиться через аякс к свойству класса пхпе" является заведомо бессмысленным. JS не работает со свойствами классов в РНР.
Поэтому в решении таких проблем очень помогает логика.
Если отставить в сторону "свойства", то мы получим довольно простую формулировку вопроса: "почему синхронный и асинхронный запрос к одному и тому же скрипту возвращают разные данные?". И здесь уже, рассуждая логически, можно прийти к очевидному ответу: эти запросы обращаются к разным бэкендам. То есть, чтобы решить проблему, надо либо обновить код на том сервере, к которому обращается fetch, либо делать запрос на тот сервер, который возвращает правильные данные.

Это если исходить из предоставленных данных. Вполне вероятно, что автор запутался где-то ещё. Но тут уже ему придётся разбираться самостоятельно. Но опять же, рассуждая логически, а не "Почему не получается обратиться к свойству php через асинхронный запрос?".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы