2011-12-16 114 views
0

我有一种情况,我需要从表单submit()中获取数据。我已经在动作中给出了url,并将这些值作为输入元素发送。提交给REST Web服务。ajaxForm异步调用

我想检索提交中的值,这是无法在正常的form.submit()中完成的,因此我不得不使用ajaxForm()调用。我认为成功完成REST方法后调用成功提到的处理程序。我还给出了async:false选项,因为我想完成该调用,然后才继续。

我的问题是处理程序是在其他代码之后执行的,也就是说,在执行ajax调用之后调用代码之后执行处理程序,然后执行处理程序。这是不正确的,如果我给异步:错误的权利?

这是我送给你的参考代码:

<form id="form4" action="http://comp1:8080/RestWSGS/jersey/ExcelHtmlTablePlain" style="display:none" 
     enctype="multipart/form-data" method="post"> 
     <input id ="username" name="username" type="hidden" /> 
     <input id ="wbk" name="wbk" type="hidden" value="new" /> 
     <input type="submit" style="display:none" /> 
</form> 

$(function() { 
    $('#form4').submit(); 
    alert(tbLHSString); 
} 

function showResponse(responseText, statusText, xhr, $form) { 

    if (xhr.readyState == 4) { 
     tbLHSString = responseText; 
    } 
    alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + '\n\nThe output div should have already been updated with the responseText.'); 
    executed == true; 
} 

在服务器控制台上,我可以看到的是,REST完美执行。但是我得到的变量未定义,只有showResponse的警报发生。

请帮我做这个调用同步! Kavita

回答

0

您的AJAX调用是同步的,只意味着其他的AJAX调用将不得不等待那个完成。它不会阻止JavaScript引擎进一步执行。我建议不要在这里同步调用,它似乎并不是你想要的。

您需要确保任何必须等到AJAX调用之后才能被回调调用的任何内容,而不是在提交之后立即执行。

您实际初始化ajaxForm的代码段不包含在您的问题中,但我认为showResponse在成功的AJAX请求后被调用,并且您希望在此之后调用alert(tbLHSString);。在这种情况下,您必须将警报移至showResponse

如果代码太多或出于其他任何不便于您将其放入回调本身的原因,请将其委托给由回调调用的函数。

$(function() { 
    $('#form4').submit(); 
} 

function onFormSubmitted() { 
    alert(tbLHSString); 
} 

function showResponse(...) { 

    ... 

    onFormSubmitted(); 

} 
+0

我这样做,它也可以工作,但这意味着与async:false同步调用ajaxForm不工作异步。我曾尝试在showresponse中初始化变量,然后仅在设置值时继续。但是,它把它放在一个循环中...不管怎样,谢谢!幸运的是代码并不多! – kavita 2011-12-16 08:59:55