Php ajax在调用页面完成之前进入Success
我有以下代码:Php ajax在调用页面完成之前进入Success,php,ajax,jquery,Php,Ajax,Jquery,我有以下代码: <script type="text/javascript"> $(function(){ $("#AddMaps").submit(function(){ var $form = $('#AddMaps'); $.ajax({ type: 'POST', url: $form.attr( 'action' ),
<script type="text/javascript">
$(function(){
$("#AddMaps").submit(function(){
var $form = $('#AddMaps');
$.ajax({
type: 'POST',
url: $form.attr( 'action' ),
data: $form.serialize(),
dataType: "json",
beforeSend:function(){
// Set up Loading Image and disable submit button
$('#ajax-panel').html('<div class="loading"><img src="loader.gif" alt="Loading..." /></div>');
},
success:function(data){
// Successful Request; do something
$('#ajax-panel').empty();
if (data.response != "Success"){
$('#ajax-panel').append('Error Occurred' + data.response);
}
else {
$('#ajax-panel').append('File(s) Uploaded');
}
},
error:function(){
// Failed Request; Freak out
$('#ajax-panel').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
}
});
});
});
</script>
<form id="AddMaps" action="test_multiple.php">
<fieldset>
<label for="server">Select a Server:</label>
<select name="server" id="server">
<option value="1">Server 1</option>
<option value="2">Server 2</option>
<option value="3">Server 3</option>
</select>
</fieldset>
<input name="submit" type="submit" id="submit" value="Upload">
<div id="ajax-panel"></div>
</form>
我遇到的问题是,ajax调用在test_multiple.php调用完成之前很久就进入了success函数。test_multiple正在做大量的后端工作,如果我直接调用它,页面加载大约需要15秒。使用这个,它报告它立即完成,即使我可以看到后端的工作还没有完成
为什么它会马上进入成功?我如何阻止它这样做
此外,Firebug正在报告一个中止的POST请求以测试多个,但一个成功的GET请求以测试多个。这可能是因为您的表单以正常方式提交。您需要在提交处理程序的末尾返回false,以防止表单重定向到指定的“操作”,从而允许XHR请求完成 此外,Firebug报告了 已中止测试多个单元的POST请求 但是一个成功的GET请求 多次测试
标记中的表单标记没有“method”属性集,因此默认为GET。这是您的表格以正常方式提交的证据。中止的POST可能是因为在服务器收到正常HTTP get请求并开始发送输出之前,XHR请求没有机会完成。这是文件上载吗?。。。据我所知,如果没有flash的帮助,文件上传无法通过ajax完成……好吧,如果您创建一个隐藏的iframe并将表单提交给它,它可以。include complete:functionXMLHttpRequest,textStatus{$'ajax-panel'.append'Request complete';}但我认为它只是返回了一个失败的请求。您可以检查successdata的第二个参数textStatus和XMLHttpRequest的状态,还可以检查request对象以获取有关请求的更多数据。这不是上载,而是在后端的服务器之间传输一组文件。但是,用户的计算机没有发出任何信息。它正在运行,只是在完成传输之前调用了success函数。我在submit处理程序的末尾添加了return false,但现在它跳转到错误处理程序。调用脚本仍然在后端成功地完成了检查,但JQuery说它没有完成。我还添加了method=POST d'oh!。Firebug仍然显示此POST请求已中止,但正如预期的那样,它不会恢复到GET。如上所述,请求确实完成了。我接受了这个答案,因为它回答了我为什么要输入Jquery的成功方法的问题。我将打开一个关于Firebug和被终止帖子的新问题。谢谢你。