我是JQuery和Ajax的新手
我正在尝试使用从Ajax调用返回的值到另一个Ajax调用。 例如:
$.ajax({
type: "POST",
url: "http://localhost/FormBuilder/index.php/forms/saveForm/",
async: false,
data: "formname="+formname+"&status="+status,
success: function(msg){
//alert( "Data Saved: " + msg);
getformid=msg;
}//success
});//ajax
$("#fb_contentarea_col1down21 div").each(function() {
alert("Form id "+getformid);//alerts me the Formid returned from the Cakephp controller side
var checked="false";
var id=$(this).attr("id");
var fsize=$("#input"+id+"").width();
var ftype=$("#input"+id+"").attr('data-attr');
var finstr=$("#instr"+id+"").text();
var fname=$("#label"+id+"").clone().html().replace(/<span.*/,'');
if($("#label"+id+"> span.req").length > 0)
{
checked="true";
}
$.ajax({
type: "POST",
async: false,
url: "http://localhost/FormBuilder/index.php/forms/saveField",
data: "sequence_no="+id+"&name="+fname+"&type="+ftype+"&size="+fsize+"&instr="+finstr+"&formid="+getformid+"&required="+checked,
success: function(msg){
//alert( "Data Saved: " + msg);
}//success
});//ajax
});//DIV
第一个Ajax调用返回表单ID,甚至在div中正确提醒它,但getformid中返回的值不会反映在第二个ajax调用中。请告诉我出了什么问题。
编辑:解决了错误。我的Cakephp控制器中的原因不在于我的Ajax调用,我只返回表单ID而不是表单实例。我已经改变并得到了答案。感谢所有帮助过的人。
答案 0 :(得分:2)
编辑:我刚刚意识到您正在进行同步(非A)jax查询?
我说这是因为你正在使用
async: false,
在你的两个Ajax请求中
这意味着只要每个请求完成,您的用户的浏览器就会冻结;你真的应该三思而后行:如果你的服务器真的不是很快,你的用户会认为“这个网站是废话,它是免费的,我的浏览器”
请参阅http://docs.jquery.com/Ajax/jQuery.ajax#options:
默认情况下,发送所有请求 异步(即设置为true) 默认情况下)。如果你需要同步 请求,将此选项设置为false。 请注意,同步请求可能 暂时锁定浏览器, 禁用任何操作时 请求已激活。
这仅适用于执行异步请求:
因此,现在可能不是问题;但如果你将请求更改为异步,它将变得相关,所以我不会删除它。
首先,Ajax意味着 A 同步:Ajax请求在后台完成,而页面/脚本的其余部分继续执行。
这意味着:
可能发生的情况是,你的情况是,只有在第一个Ajax查询完成时才设置getformid - 这是在第二个Ajax查询已经开始之后。
如果您希望仅在第一个Ajax查询完成时启动第二个Ajax查询,则第二个Ajax查询必须由挂在第一个的“success”事件上的函数启动(而不是分配“ msg
“to”getformid
“):将它”放在源头后“是不够的。