each()方法中的Ajax

时间:2013-10-06 21:52:27

标签: jquery ajax

我有三个脚本

第一个动态生成一个表单,其中包含几个输入,其值包含我所在的id_mensaje。我想删除与id_mensaje相关的mysql注册表。 我宁愿给你看剧本

1.- correo.php

<div id='eliminar_mensaje'><a href='#'>Eliminar</a> </div>      
<form>  
<input class='elim_msg' type='checkbox' value='id_mensaje_".$i."' />  

...  more inputs whith same class name

</form>    

2.- correo.js

$('#eliminar_mensaje a').on('click', function(){  
    $('#loading').show();  
    $('.elim_msg').each(function(i,e){  
        var value = $(e).val();  
        var checked = $(e).prop('checked');  
        if(value != 'ok' && checked == true){  
            $.ajax({  
                url: 'private/control_correo.php',  
                type: 'POST',  
                data: 'id_mensaje='+value+'&accion=eliminar_mensaje'  
            });  
        } else {  
            //do nothing  
        }  
    });  
    location.reload(true);  
    return false;  
});  

3.- control_correo.php

...} else if(isset($_POST['accion']) AND $_POST['accion'] == 'eliminar_mensaje'){  
        consultav2("DELETE FROM destinatarios WHERE id_mensaje = '".$_POST['id_mensaje']."';");    
        consultav2("DELETE FROM mensajes WHERE id_mensaje = '".$_POST['id_mensaje']."';");  
    }    

当你点击在eliminar_mensaje div上的链接时,它看起来javascript代码有效,但它确实没有任何我无法找到的原因。

你们有没有看到剧本中的任何内容?  坦克提前很多!

4 个答案:

答案 0 :(得分:1)

您需要在ajax调用中使用成功和错误参数来确定请求是否成功:

$.ajax({  
    url: 'private/control_correo.php',  
    type: 'POST',  
    data: 'id_mensaje='+value+'&accion=eliminar_mensaje',
    success: function(message) {
        // do things on success
        alert(message);
    },
    error: function(message) {
        // ajax request failed (not necessarily the server side processing failed)
        alert(message);
    }
});

你还应该先看一下构建一个数据数组,然后传入一个数组,然后只进行一次ajax调用。

$('#eliminar_mensaje a').on('click', function(){  
    $('#loading').show();  
    var ajaxArray = {};
    $('.elim_msg').each(function(i,e){  
        var value = $(e).val();  
        var checked = $(e).prop('checked');  
        if(value != 'ok' && checked == true){  
            ajaxArray.push( e ); // add contents of e to array 
        } else {  
            //do nothing  
        }  
    });

    // done with finding data, do ajax
    $.ajax({  
        url: 'private/control_correo.php',  
        type: 'POST',  
        data: {
            dataArray: ajaxArray
        },
        success: function(message) {
            // do things on success
            alert(message);
        },
        error: function(message) {
            // ajax request failed (not necessarily the server side processing failed)
            alert(message);
        }
    });
    // your server side script loops through the passed array and does things there, only one ajax request
});

另外,location.reload()的用途是什么?这也发生在点击上,可能会干扰你的ajax处理...如果你发送一个带有一个请求的数组,你可以将你的location.reload放入成功函数。

答案 1 :(得分:0)

$.ajax中的

.each表示您正在制作一系列同步的AJAX请求,这些请求可能会失败。您需要对AJAX请求进行排队,以便在任何给定点上一次只能激活一个。其他人需要排队等候。或者,您可以修改服务器脚本以接受包含多个项目的单个请求。

答案 2 :(得分:0)

试试这个:

data: { id_mensaje: value, accion: 'eliminar_mensaje'}

而不是:

data: 'id_mensaje='+value+'&accion=eliminar_mensaje' 

答案 3 :(得分:0)

这对你来说很好用

<script>
$(document).ready(function(){

    $('#eliminar_mensaje a').on('click', function(){  alert('hj')
    $('#loading').show();  
    $('.elim_msg').each(function(i,e){ 
        var value = $(e).val();  
        var checked = $(e).prop('checked');  
        if(value != 'ok' && checked == true){  
            $.ajax({  
                url: 'private/control_correo.php',  
                type: 'POST',  
                data: 'id_mensaje='+value+'&accion=eliminar_mensaje'  
            });  
        } else {  
            //do nothing  
        }  
});  

}); 

});

</script>



<input type="button" class="clik_for_fetch" value="dsfds"/>

<div id='eliminar_mensaje'><a href='javascript:void(0)'>Eliminar</a> </div>      
<form>  
<input class='elim_msg' type='checkbox' value='id_mensaje_".$i."' />  

...  more inputs whith same class name

</form>