在默认表单操作后运行ajax?

时间:2014-04-17 15:20:58

标签: php ajax

我使用以下代码使用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调用。

那么,有没有办法同时执行AJAXdefault form action?或者,一个接一个?

P.S。我确实删除了e.preventDefault();,它将阻止AJAX调用工作!

任何帮助将不胜感激。

由于

3 个答案:

答案 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;