这是我的第一天和第一个问题,如果我的问题对于这个平台来说非常微不足道,希望你能原谅我。
我试图在ajax中调用ajax,一个ajax调用将调用一个cotroller动作,它将在数据库中插入一条记录,第一个ajax调用的动作是
public function createAction(Request $request){
if ($request->isXmlHttpRequest()) {
$name = $request->get("gname");
$description = $request->get("desc");
$portfolio_id = $request->get("PID");
$portfolio = $this->getDoctrine()
->getRepository('MunichInnovationGroupPatentBundle:PmPortfolios')
->find($portfolio_id);
$portfolio_group = new PmPatentgroups();
$portfolio_group->setName($name);
$portfolio_group->setDescription($description);
$portfolio_group->setPortfolio($portfolio);
$portfolio_group->setOrder(1000000);
$portfolio_group->setIs_deleted(0);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($portfolio_group);
$em->flush();
$msg = 'true';
}
echo $msg;
return new Response();
}
第二个ajax调用将获取第一个ajax调用插入的更新数据,此调用的操作是
public function getgroupsAction(Request $request){
if ($request->isXmlHttpRequest()) {
$id = $request->get("PID");
$em = $this->getDoctrine()->getEntityManager();
$portfolio_groups = $em->getRepository('MunichInnovationGroupPatentBundle:PmPatentgroups')
->getpatentgroups($id);
echo json_encode($portfolio_groups);
return new Response();
}
}
我的JQuery如下
$.ajax({
type: 'POST',
url: url,
data: data,
success: function(data) {
if(data == "true") {
$("#new-group").fadeOut("fast", function(){
$(this).before("<strong>Success! Your Portfolio Group is created Successfully.</strong>");
setTimeout("$.fancybox.close()", 3000);
});
$.ajax({
type: 'POST',
url: getgroups,
data: data,
success: function(data)
{
var myArray = JSON.parse(data);
var options = $("#portfolio-groups");
for(var i = 0; i < myArray.length; i++)
{
options.append($("<option />").val(myArray[i].id).text(myArray[i].name));
}
}
});
}
}
});
我在第一个成功中调用第二个ajax以确保第一个ajax成功完成,但第二个ajax调用没有获得更新的数据。
如何确保在第一个ajax完成后调用第二个ajax并获得最近插入的数据
由于
我的解决方案 只需使用一个ajax调用
在创建操作中进行插入,在插入后立即获取投资组合的所有组,并返回json_encode($ portfolio_groups);
在JQuery中
$.ajax({
type: 'POST',
url: url,
data: data,
success: function(data) {
$("#new-group").fadeOut("fast", function(){
$(this).before("<strong>Success! Your Portfolio Group is created Successfully.</strong>");
setTimeout("$.fancybox.close()", 3000);
});
var myArray = JSON.parse(data);
var options = $("#portfolio-groups");
for(var i = 0; i < myArray.length; i++)
{
options.append($("<option />").val(myArray[i].id).text(myArray[i].name));
}
}
});
答案 0 :(得分:3)
我认为问题可能是你有很多变量名'数据'。在第二个ajax调用中,发送的数据将始终为“true”,但我怀疑您想发送其他内容。我会给他们独特的名字,让事情更清楚,看看会发生什么。
答案 1 :(得分:1)
只使用一个ajax调用
在创建操作中进行插入,在插入后立即获取投资组合的所有组,并返回json_encode($ portfolio_groups);
在JQuery中
$.ajax({
type: 'POST',
url: url,
data: data,
success: function(data) {
$("#new-group").fadeOut("fast", function(){
$(this).before("<strong>Success! Your Portfolio Group is created Successfully.</strong>");
setTimeout("$.fancybox.close()", 3000);
});
var myArray = JSON.parse(data);
var options = $("#portfolio-groups");
for(var i = 0; i < myArray.length; i++)
{
options.append($("<option />").val(myArray[i].id).text(myArray[i].name));
}
}
});
答案 2 :(得分:0)
第一个Ajax的成功方法中的Ajax正如您所做的那样,应该确保在第一个Ajax之后调用第二个Ajax。只有在返回结果后才会触发成功方法。
对于测试,在调用第二个Ajax之前,在第一个Ajax req中添加console.log()。第二个Ajax成功方法中的另一个console.log()。
尝试将console.log放在第一个成功的&gt;数据变量上,看看你得到了什么。如果您有错误,我将导致第二个请求失败。