Как получить доступ к данным, возвращаемым в вызове AJAX, с помощью обычного JavaScript? - PullRequest
0 голосов
/ 06 октября 2019

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

<script type="text/javascript">
    function showMessage(jobid) {
         let result;
         new Request.JSON({
             url: '<?php echo site_url('job/getDiscrepancyByJobId/'); ?>/' + jobid,
             dataType: 'text',
             onSuccess: function(data) {
                 console.log(data);
             }
         }).send();
     }
</script>

Когда скрипт выше вызывается, я ничего не получаю на консоль. Я попытался сделать это:

<script type="text/javascript">
    function showMessage(jobid) {
        let request = new XMLHttpRequest();
        request.open('GET', '<?php echo site_url('job/getDiscrepancyByJobId'); ?>/' + jobid, true);
        request.onload = function() {
            if (this.status >= 200 && this.status < 400) {
                console.log('data: ' + JSON.stringify(this.response));
            } else {
                    // Error
            }
        };
        request.send();
    }
</script>

, но просто выводит data: "" на консоль.

Эта функция называется:

public function getDiscrepancyByJobId($jobid) {
    return $this->MJob->getJobChangeLog($jobid);
}

И MJob-> getJobChangeLog ($ jobid):

function getJobChangeLog($jobid, $limit = 10) {
    if (empty($jobid)) {
        return false;
    }
    $Q = $this->read_db->query('select timestamp, ifnull(t.name, ifnull(u.name, "")) as name, uri, description, postdata, marginchange 
         from jobchangelog l 
         left join user u on u.id=l.userid 
         left join transcriber t on t.id=u.transcriberid 
         where jobid=' . intval($jobid) . '
         order by timestamp desc 
         limit ' . intval($limit));
    return array_map(function($a){ $a['postdata'] = @unserialize($a['postdata']); return $a; }, $Q->result_array());
}

Информация, которую я ищу, находится в части @unserialize($a['postdata']), и я тоже не знаю, как получить к ней доступ.

Любая помощь будет отличной. Заранее благодарю за терпение.

1 Ответ

0 голосов
/ 07 октября 2019

Я изменил функцию getDiscrepancyByJobId на это:

public function getDiscrepancyByJobId($jobid) {
    $discrepancy = $this->MJob->getJobChangeLog($jobid);
    echo $discrepancy[0]['postdata']['message'];
}

И я изменил запрос AJAX на это:

function showMessage(jobid) {
    let request = new XMLHttpRequest();
    let jid = jobid;
    request.open('GET', '<?php echo site_url('job/getDiscrepancyByJobId'); ?>/' + jobid, true);
    request.onload = function() {
        if (this.status >= 200 && this.status < 400) {
             console.log(decodeURIComponent(this.response));
        } else {
             // Error
        }
    };
    request.send();
}

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...