Данные JSON не показывают Ajax внутри Ajax

ниже код о том, как я пытаюсь получить данные из базы данных. Первый Ajax успешно показывает данные, а второй (Ajax-запрос внутри первого Ajax) ничего не показывает.

Дополнительные пояснения:

  1. Первый Ajax запрашивает данные onchange (работает)
  2. Второй (внутри функции успеха) запрашивает другие данные, но никогда не доставляется в представление.

    $(document).ready(function(){
    
    $('#idclient').change(function(){
        var client=$(this).val();
        $.ajax({
            url : "<?php echo base_url();?>Skejuler/get_dclient",
            method : "POST",
            data : {clients: client},
            async : false,
            dataType : 'json',
            success: function(data){
                console.info(data);
    
    $.ajax({
        url: '<?php echo base_url() ?>Skejuler/get_lastprob',
        method : "POST",
        data : {clients: client},
        async: false,
        dataType: 'json',
        success: function(data){
            console.info(data);
            var dbkosong = 'Belum ada problem';
            var DLP = '';
            var i;
            for(i=0; i<data.length; i++){
                DLP += data[i].catprobc+' : '+data[i].action+' oleh '+data[i].hero+' pada '+data[i].created_at; //**is this line any wrong?**
            }
            if (!data) { $('.showLP').html(dbkosong); }
            else { $('.showLP').html(DLP); }
            },
            error: function(){
            alert('Database kosong!');
            }
    });
    
                var html = '';
                var i;
                for(i=0; i<data.length; i++){
                    html += '<div class = "box-body table-responsive no-padding">'+
                    '<table class = "table table-hover">'+
                    '<tr>'+
                    '<th>ID</th>'+
                    '<th>'+data[i].client+'</th>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>MONITORING</td>'+
                    '<td>'+data[i].moni+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>IPPBX</td>'+
                    '<td>'+data[i].ippbx+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>DATABASE</td>'+
                    '<td>'+data[i].ipdb+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>MULTIMEDIA</td>'+
                    '<td>'+data[i].ipmm+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>RECORDING</td>'+
                    '<td>'+data[i].iprec+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>FXO</td>'+
                    '<td>'+data[i].ipfxo+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>VM</td>'+
                    '<td>'+data[i].ipvm+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>LOKASI ACD</td>'+
                    '<td>'+data[i].acd+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>CALL CENTER</td>'+
                    '<td>'+data[i].callcenter+'</td>'+
                    '</tr>'+
                    '<tr>'+
                    '<td>PROB TERAKHIR</td>'+
                    '<td><span class = "showLP"></span></td>'+ //**Here I'm trying to show the data from database by attr CLASS: showLP, but nothing**
                    '</tr>'+
                    '<tr>'+
                    '<td>STAT</td>'+
                    '<td>'+data[i].stat+'</td>'+
                    '</tr>'+
                    '</table></div>'
                    ;
                }
                $('.cclient').html(html);
    
            }
        });
    });
    
    });
    

Мой контроллер:

    function get_lastprob(){
    $client=$this->input->post('clients');
    $result=$this->skejuler_m->get_lastprob($client);
    echo json_encode($result);
}

function get_dclient(){
    $client=$this->input->post('clients');
    $result=$this->skejuler_m->get_dclient($client);
    echo json_encode($result);
}

Мой взгляд:

<select name = "nameclient" id = "idclient" class = "form-control">
                        <?php $issetotslm = $_REQUEST["nameclient"]; ?>
                        <option value = "" selected = "selected">^^CLIENT^^</option>
                        <?php foreach($clients as $row) { echo '<option value = "'.$row->client.'">'.$row->client.'</option>'; } ?>
                    </select>

Я могу видеть данные JSON, проверяя в браузере, но что я делаю неправильно/отсутствует в сценарии? Пожалуйста помоги...

Спасибо

Вы пробовали .val() или .text() вместо html(), если да, что пошло не так?

Yash Karanke 27.01.2019 08:25

Думаю, это ответит на ваш вопрос. wordpress.stackexchange.com/questions/118772/…

Tayyab 27.01.2019 08:29

@YashKaranke Пытался. Но все еще не работает. Спасибо

W. Wan 27.01.2019 09:03

я не вижу здесь никакой причины для сложенного вызова ajax - просто объедините вывод get_dclient и get_lastprob в одну функцию...

sintakonte 27.01.2019 09:04

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

umefarooq 27.01.2019 09:13

Не могли бы вы попробовать заменить: '<td><span class = "showLP"></span></td>'+ на '<td><span class = "showLP">'+(DLP ? DLP : dbkosong)+'</span></td>'+?

Hasta Dhana 27.01.2019 09:16

@sintakonte Первый ajax / get_dclient получает данные из таблицы 1 (содержат столбец с именем клиент). Второй ajax вызывает данные, где client=$client (хранится как данные формы) из таблицы2

W. Wan 27.01.2019 09:33

@umefarooq Заранее спасибо. Я только что добавил свой контроллер и просмотр в свой вопрос.

W. Wan 27.01.2019 09:45

@HastaDhana заменен. И получил ошибку "ReferenceError: DLP не определен"

W. Wan 27.01.2019 09:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
352
2

Ответы 2

Второй ajax так и не получил var client, потому что его область действия закончилась при первом вызове ajax, и чтобы исправить это, вам нужно сделать его глобальным var:

var client;

$(document).ready(function(){

$('#idclient').change(function(){
    client=$(this).val();
    $.ajax({
        url : "<?php echo base_url();?>Skejuler/get_dclient",
        method : "POST",
        data : {clients: client},
        async : false,
        dataType : 'json',
        success: function(data){
            console.info(data);
            $.ajax({
                url: '<?php echo base_url() ?>Skejuler/get_lastprob',
                method : "POST",
                data : {clients: client},
                async: false,
                dataType: 'json',
                success: function(data){
                ...

Спасибо за ответ, как первый, так и второй Ajax хранят свои vars как var: client (с s) после выполнения функции Onchange (первый Ajax). Также попытался добавить глобальную переменную и все еще ничего. Верен ли этот составной Ajax (логика и метод)? Есть ли другой лучший способ?

W. Wan 28.01.2019 03:29

поскольку я новичок в кодировании и только что узнал о том, как работает асинхронный: ложь, я просто раскомментировал его для второго Ajax. И это работает!

Вот обнова на втором Аяксе (внутри):

$.ajax({
url: '<?php echo base_url() ?>Skejuler/get_lastprob',
method : "POST",
data : {clients: client},
//async: false,
dataType: 'json',
success: function(data){
    var dbkosong = 'Belum ada problem';
    var DLP = '';
    var i;
    for(i=0; i<data.length; i++){
        DLP += data[i].catprob+' : '+data[i].action+' oleh '+data[i].hero+' pada '+data[i].created_at;
    }
    if (!data) { $('.showLP').html(dbkosong); }
    else { $('.showLP').html(DLP); }
    },
    error: function(){
    alert('Database kosong!');
    }
});

Но мне нужно знать, что так / логика, которую я получаю с помощью сложенного Ajax, хороша в производительности. Если у кого-то есть другой лучший способ, поделитесь им. Спасибо.

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