在AJAX中发送帖子

时间:2016-12-10 01:01:05

标签: javascript php jquery ajax codeigniter

验证后我有这个submitHandler:

submitHandler: function(form){
    var data = $(form).toArray();
    var file_data = $('#firma').prop('files')[0];
    data.append('firma', file_data);
    $.ajax({
        url: form.action,
        cache: false,
        contentType: false,
        processData: false,
        type: form.method,
        data: data,
        success: function(response) {
            $(".modal-body").html(response)
            $("#modalDialog").modal();        
        }
    });
}

这段代码完美无缺,但我的问题是它重定向到处理函数的控制器,将表单数据插入数据库。

我使用此代码获得相同的结果:

submitHandler: function(form){
    var data = new FormData();
    var file_data = $('#firma').prop('files')[0];
    data.append('firma', file_data);
    $.ajax({                
        url: form.action,
        cache: false,
        contentType: false,
        processData: false,
        type: form.method,
        data: data,
        success: function(response,e) {
            $(".modal-body").html(response)
            $("#modalDialog").modal();        
        }
    });
}

正如您所看到的,我使用新的toArray()而不是FormData()函数。此代码不会重定向到控制器,而只是显示正文中添加了HTML的模式,但它只是发送file_data变量。

我尝试更换:

var data = new FormData();

使用:

var data = new FormData($(this)[0]);

这样可以正常工作,但我仍然会重定向到控制器

这是我的控制者:

 public function enviarSolicitud(){

    //REVISAR SI EL ARCHIVO ES UNA IMAGEN DE CON EXTENSION VALIDA

    $allowed = array('gif', 'png', 'jepg', 'jpg');
    $filename = $_FILES['firma']['name'];
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    if (!in_array($ext, $allowed)) {
        echo "El archivo no es válido, ingresa solamente imágenes";
    }else{

        //ERROR EN CASO QUE NO SE HAYA SUBIDO O NO SE DETECTE UN ARCHIVO

        $path = "admin/assets/global/img/stylos/firmas/";
        if (0 < $_FILES['firma']['error']){
            echo 'Error: ' . $_FILES['firma']['error'] . '<br>';
        }else{
            move_uploaded_file($_FILES['firma']['tmp_name'], $path . $_FILES['firma']['name']);

            //INSERTAR LA INFORMACION DEL CLIENTE NUEVO EN LA BASE DE DATOS

            $data = array(
                'nombre' => $this->input->post('nombre'),
                'sexo' => $this->input->post('sexo'),
                'apellido_paterno' => $this->input->post('apellido_paterno'),
                'apellido_materno' => $this->input->post('apellido_materno'),
                'calle' => $this->input->post('calle'),
                'numero_ext' => $this->input->post('num_exterior'),
                'numero_int' => $this->input->post('num_interior'),
                'colonia' => $this->input->post('colonia'),
                'estado' => $this->input->post('estado'),
                'ciudad' => $this->input->post('ciudad'),
                'CP' => $this->input->post('c_postal'),
                'firma' => $path.$_FILES['firma']['name'],
                'tel_casa' => $this->input->post('tel'),
                'tel_celular' => $this->input->post('cel'),
                'created_at' => date('Y-m-d'),
            );

            //OBTENER EL NUMERO DE CLIENTE PARA INSERTARLO EN LA TABLA DE AUTORIZACIONES

            $num_cliente = $this->CreditosModel->guardarSolicitud($data);

            $data = array(
                'num_cliente' => $num_cliente,
                'tipo' => 'Autorizar Crédito',
                'estatus' => 'P',
                'fecha_solicitud' => date('Y-m-d h:m:s')
            );
            $solicitud = $this->CreditosModel->solicitarAutorizacion($data);

            echo "La solicitud se ha procesado satisfactoriamente, favor de indicar al cliente que nos pondremos en contacto a la brevedad # de solicitud: <strong>".$solicitud."</strong>";

        }
    }        
}

我想避免重定向,只显示带有echo字符串的模式。

1 个答案:

答案 0 :(得分:1)

您的脚本可能有错误。尝试

import javax.swing.JOptionPane;

public class Password {  

public static void main(String[] args){ 
int tryAgainCount = 0;

while(tryAgainCount < 3) {
    tryAgainCount++;

    String password = JOptionPane.showInputDialog("Please enter a password: ");

    if(isValidPassword(password)) {
        JOptionPane.showMessageDialog(null, "Valid Password.");
        break;

    } else {
        JOptionPane.showMessageDialog(null, "Invalid Password. You've tried " + tryAgainCount + " out of 3 times.");
        continue;
    }

    }
JOptionPane.showMessageDialog(null, "Programmed by Alyssa Marquina");
}   

public static boolean isValidPassword(String password) {    
if (password.length() < 8) {   
    return false;  
} else {      
    char c;  
    int count = 0;   
    for (int i = 0; i < password.length(); i++) {  
        c = password.charAt(i);  
        if (!Character.isLetterOrDigit(c)) {          
            return false;  
        } else if (Character.isDigit(c)) {  
            count++;     
        }  
    }  
    if (count < 2)   {     
        return false;  
    }  
}  
return true; 
}   
}