我在嵌套AJAX调用中遇到了一个非常奇怪的问题 我用php创建了一个简单的AJAX调用,我有两个AJAX调用。第二个调用始终包含第二个调用的json数据以及第一个调用的数据。
这是我的代码:
PHP
<?php
...
if (isset($_REQUEST['ajax_action']) && !empty($_REQUEST['ajax_action'])) {
$action = $_REQUEST['ajax_action'];
switch ($action) {
/**
* Scheda
*/
case 'Scheda_getSchedeBySerie':
$idSerie = isset($_REQUEST["idSerie"]) ? $_REQUEST["idSerie"]: NULL;
echo Scheda::getSchedeBySerie($idSerie);
/**
* Serie
*/
case 'Serie_getSeriesByUSer':
$idDb = isset($_REQUEST["ID_DB"]) ? $_REQUEST["ID_DB"]: NULL;
$userName = isset($_REQUEST["userName"]) ? $_REQUEST["userName"]: NULL;
//ob_start();
echo Serie::getSeriesByUSer($idDb, $userName);
break;
}
}
?>
AJAX首次通话
var data = {
ajax_action: 'Serie_getSeriesByUSer',
ID_DB: '<?php echo $ID_DB; ?>',
userName: '<?php echo $username; ?>',
};
$.ajax({
url: 'ajax.php',
type: "post",
data: data ,
dataType: 'html',
async: false,
success: function (response) {
alert(response);
var list = $.parseJSON(response);
var source = [];
for (i = 0; i < list.length; i++) {
var group = "<div>" + list[i].editore.trim() + "</div>";
var html = "<div> " + list[i].collana.trim() + "</div>";
var title = list[i].idSerie.trim();
if(i == 0)
idSerieTo = list[i].idSerie.trim();
var r = {html: html, title: title, group: group };
source.push(r);
}
$('#ddlElencoCollaneCI').off('select');
$("#ddlElencoCollaneCI").jqxDropDownList({ source: source});
var item = $('#ddlElencoCollaneCI').jqxDropDownList('getItem', 0);
if (item != null) {
idSerieTo = item.label;
PopolaElencoLibri(idSerieTo);
}
$('#ddlElencoCollaneCI').on('select', function (event) {
var args = event.args;
var item = $('#ddlElencoCollaneCI').jqxDropDownList('getItem', args.index);
if (item != null) {
idSerieTo = item.label;
PopolaElencoLibri(idSerieTo);
}
});
},
AJAX第二次通话
function PopolaElencoLibri(idSerie) {
var data = {
ajax_action: 'Scheda_getSchedeBySerie',
idSerie: idSerie,
};
$.ajax({
url: 'ajax.php',
type: "post",
data: data ,
dataType: 'html',
async: false,
success: function (response) {
// response contain Scheda_getSchedeBySerie result AND Serie_getSeriesByUSer :(
alert(response);
var list = $.parseJSON(response);
var source = [];
for (i = 0; i < list.length; i++) {
var group = "<div></div>";
var html = "<div> " + list[i].numerodescr.trim() + "</div>";
var title = list[i].idScheda.trim();
//if(i == 0)
// idSerieTo = list[i].idSerie.trim();
var r = {html: html, title: title, group: group };
source.push(r);
}
$("#ddlElencoLibriCI").jqxDropDownList({ source: source});
}
});
}
第二个ajax调用的响应数据包含Scheda_getSchedeBySerie结果和Serie_getSeriesByUSer。
我将尝试ob_start();和ob_end_clean();但没有返回任何数据。
有什么主意吗?我是php和AJAX的新手。
答案 0 :(得分:1)
您应该在每个case语句后添加break
。
switch ($action) {
/**
* Scheda
*/
case 'Scheda_getSchedeBySerie':
$idSerie = isset($_REQUEST["idSerie"]) ? $_REQUEST["idSerie"]: NULL;
echo Scheda::getSchedeBySerie($idSerie);
break;
/**
* Serie
*/
case 'Serie_getSeriesByUSer':
$idDb = isset($_REQUEST["ID_DB"]) ? $_REQUEST["ID_DB"]: NULL;
$userName = isset($_REQUEST["userName"]) ? $_REQUEST["userName"]: NULL;
//ob_start();
echo Serie::getSeriesByUSer($idDb, $userName);
break;
}