在我的应用程序中,我使用的是Ajax帖子:
$('#fb_contentarea_col3 #fb_contentarea_col1down2 #saveForm').live("click", function() {
if (!$("#formName").val() == "") {
if (saveDraft == 'on')
status = "Incompleted";
else
status = "Completed";
var formname = $("#formName").val();
$.ajax({
type: "POST",
url: "http://localhost/FormBuilder/index.php/forms/saveForm/",
async: false,
data: "formname=" + formname + "&status=" + status,
success: function(msg) {
getformid = msg;
//returned FOrm id is saved in the JQuery variable
}
//success
});
//ajax
$("#fb_contentarea_col1down21 div").each(function() {
alert("Form id " + getformid);
//alerts me the Form id retrieved
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",
url: "http://localhost/FormBuilder/index.php/forms/saveField",
async: false,
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
}
//for each DIv in mu design page i am saving them as Field
}
//if formname exists
}
//saveForm
从Controller端返回的Form id正确保存在变量getformid中,但它没有反映在savefield ajax post中。它只保存为0,即使它作为返回的Form id提醒..请建议我..
注意::问题是对
的引用https://stackoverflow.com/questions/1264343/varaibles-inside-success-function-of-ajax-post
另外我在这里给我的控制器中的代码为saveForm
function saveForm()
{
$this->data['Form']['name']=$this->params['form']['formname'];
$this->data['Form']['created_by']=$this->Session->read('userId');
$this->data['Form']['status']=$this->params['form']['status'];
$this->data['Form']['access']="Private";
$formId=$this->Form->saveForms($this->data);
$this->set('formId',$formId);
}
我的模型saveForms就像
function saveForms($data)//design saveForm
{
$this->data['Form']['name']=$data['Form']['name'];
$this->data['Form']['created_by']=$data['Form']['created_by'];
$this->data['Form']['status']=$data['Form']['status'];
$this->data['Form']['access']=$data['Form']['access'];
$this->save($this->data);
return $this->id;//returns the saved Form id to the controller
}
我的views文件夹中的save_form.ctp就像
<?php echo $formId;?>
答案 0 :(得分:4)
您在AJAX调用的getformid
处理程序中设置success
,但使用 getformid
的代码在该函数之外。
永远不要忘记,当你调用$.ajax
之类的东西时,函数会在AJAX调用完成之前立即返回,当然也就是在你的success
函数运行之前。这就是异步的原因。
因此,在AJAX请求完成后你想要执行的任何代码必须进入success
函数(或者在success
内部调用的另一个函数中)。
答案 1 :(得分:1)
您可以创建一个函数并像参数一样传递它。例如:
function param() {
this.array = new Array(1);
this.setValue = function(v) { this.array[0] = v; }
this.getValue = function() { return this.array[0]; }
}
然后在你的ajax请求中。做类似下面的事情:
var formId = new param;
$.ajax({
type: "POST",
url: "http://localhost/FormBuilder/index.php/forms/saveForm/",
async: false,
data: "formname="+formname+"&status="+status,
success: function(msg){
formId.setValue(msg);
}//success
)};
然后,您可以通过调用 formId 变量的 getValue()方法来访问设置的值