我使用以下代码使用AJAX运行PHP文件。它工作正常,应该如此。
但是,AJAX代码所使用的格式为default action
。例如<form action="index.php">
我的AJAX代码是这样的:
<script>
$('#select').change(function(){
var selectedValue = $(this).val();
if (selectedValue === 'Yes') {
$(function(){
$('form').submit(function(e){
var thisForm = $(this);
//Prevent the default form action
e.preventDefault();
//Post the form to the send script
$.ajax({
type: 'POST',
url: 'mySecond.php',
data: thisForm.serialize(),
//Wait for a successful response
});
})
});
} else {
}
});
</script>
我知道e.preventDefault();
意味着它将摆脱默认的表单操作,它只会执行AJAX调用。
那么,有没有办法同时执行AJAX
和default form action
?或者,一个接一个?
P.S。我确实删除了e.preventDefault();
,它将阻止AJAX调用工作!
任何帮助将不胜感激。
由于
答案 0 :(得分:1)
不是这样。
您无法执行默认表单操作,然后执行Ajax,而无需设置作为表单提交响应的页面,以便在加载时发出Ajax请求。
您无法执行Ajax请求,然后允许默认表单提交继续,因为Ajax是异步的,因此在触发表单提交之前无法完成。
您可以取消默认表单操作,执行Ajax请求,然后(在Ajax请求的响应处理程序中)以编程方式提交表单(通过调用其submit()
方法)。
您可能最好使用普通表单提交作为单个请求来执行这两项任务,而不是完全使用Ajax。
答案 1 :(得分:0)
我不确定你为什么这样做但是有一种方法:
<script>
var continue = true;
$('#select').change(function(){
var selectedValue = $(this).val();
if (selectedValue === 'Yes') {
$(function(){
$('form').submit(function(e){
var thisForm = $(this);
//Prevent the default form action
if(continue){
e.preventDefault();
//Post the form to the send script
$.ajax({
type: 'POST',
url: 'mySecond.php',
data: thisForm.serialize(),
//Wait for a successful response
success: function(data){
continue = false;
$(thisForm).submit();
}
});
}
})
});
} else {
}
});
</script>
答案 2 :(得分:0)
请尝试以下操作。在完成的回调中调用ajax。
controllers.custController = function($scope, $rootScope, $routeParams){
$rootScope.subpage = 'cust';
$scope.cust = getCustomer( $routeParams.custid );
};
controllers.masterController = function($scope, $rootScope) {
switch($rootScope.subpage) {
case 'home':
$scope.subPage = 'partial.home.html';
break;
case 'cust':
if($scope.cust) {
$scope.subPage = 'partial.cust.html';
} else {
$scope.subPage = 'partial.404notfound.html';
}
break;