ниже код о том, как я пытаюсь получить данные из базы данных. Первый Ajax успешно показывает данные, а второй (Ajax-запрос внутри первого Ajax) ничего не показывает.
Дополнительные пояснения:
Второй (внутри функции успеха) запрашивает другие данные, но никогда не доставляется в представление.
$(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, проверяя в браузере, но что я делаю неправильно/отсутствует в сценарии? Пожалуйста помоги...
Спасибо
Думаю, это ответит на ваш вопрос. wordpress.stackexchange.com/questions/118772/…
@YashKaranke Пытался. Но все еще не работает. Спасибо
я не вижу здесь никакой причины для сложенного вызова ajax - просто объедините вывод get_dclient и get_lastprob в одну функцию...
привет, могу ли я увидеть ваш контроллер, сделайте вашу жизнь проще, не отправляйте json обратно, отправьте данные с контроллера, чтобы просмотреть, создать html, а затем вернуться к вашему ответу ajax.
Не могли бы вы попробовать заменить: '<td><span class = "showLP"></span></td>'+ на '<td><span class = "showLP">'+(DLP ? DLP : dbkosong)+'</span></td>'+?
@sintakonte Первый ajax / get_dclient получает данные из таблицы 1 (содержат столбец с именем клиент). Второй ajax вызывает данные, где client=$client (хранится как данные формы) из таблицы2
@umefarooq Заранее спасибо. Я только что добавил свой контроллер и просмотр в свой вопрос.
@HastaDhana заменен. И получил ошибку "ReferenceError: DLP не определен"



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Второй 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 (логика и метод)? Есть ли другой лучший способ?
поскольку я новичок в кодировании и только что узнал о том, как работает асинхронный: ложь, я просто раскомментировал его для второго 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, хороша в производительности. Если у кого-то есть другой лучший способ, поделитесь им. Спасибо.
Вы пробовали
.val()или.text()вместоhtml(), если да, что пошло не так?