JQuery.ajax()表现得很厉害还是我错过了什么?

时间:2015-08-20 08:38:12

标签: javascript php jquery ajax codeigniter

编辑:这是关于同步的,ajax调用是异步的,所以它不会阻止代码的执行。

我有一个JavaScript代码,使用JQuery.ajax()上传用户提供的文件,如果成功提交表单,则会显示错误并停止提交表单。

我已经放置了alert();在所有重要的地方,要密切注意代码的流动。问题是警报没有按照我期望的方式出现,一切都搞砸了。

如果ajax调用成功,我们首先应该看到alert('1'),如果文件上传成功,我们应该看到alert('2')否则我们应该看到alert('3'),如果ajax调用失败由于某种原因,我们应该看到警报('4'),最后我们应该看到警报('5');

但实际上警报显示如下:

alert('5')
alert('4')
alert('5')
And the alert('4') shows even before alert('5') goes away(without doing anything).

我错过了什么?

文件上传但结果未在代码的成功函数中返回。

的JavaScript

var files;

$( document ).ready (   function (  ) { $ ( '#user_file' ).on ( 'change', prepareUpload ); }

function prepareUpload ( event ) { files = event.target.files; }

$( 'myform' ).submit( function ( event ) 
{
    var gender = $ ( 'input[name=gender_group]:checked', 'myform' ).val (  );

    var data = new FormData (  );
    data.append ( 'userfile', files [ 0 ] ); 
    data.append ( 'gender', gender ); 
    data.append ( 'ajaxUpload', 'true' );
    $returnvalue = false;

    $.ajax ( {

    method : 'POST', url : scriptUrl, data : data, cache : false, processData: false, contentType: false, dataType : 'json',
    success : function ( data, textStatus, jqXHR ) { 
        alert ( '1' );
        if ( typeof data.error === 'undefined' )
        {
            alert ( '2' ); $returnvalue = true;
        }
        else
        {
        alert ( '3' ); $returnvalue = false;
        }
    },
    error : function ( xhr, ajaxOptions, thrownError ) {
        alert ( '4' ); $returnvalue = false;
    }

    });

    alert ( '5' ); return $returnvalue;

}

控制器

if (  $this->input->post ( 'gender' ) && $this->input->post ( 'ajaxUpload' )  )
{
    $this->load->model ( 'My_model' );
    echo json_encode (  $this->My_model>do_upload (  )  );
}

模型(My_model)

public function do_upload (  ) {
    $this->load->library ( 'upload' );
    $data = array (  );

    // The cofiguration for the upload call is saved in a config file - config/upload.php
    if (  ! $this->upload->do_upload (   )  ){
        $data [ 'error' ] = 'true';
    } else {         
        $data [ 'screen_name' ] = $screen_name;      
    }

    return $data;
}

0 个答案:

没有答案