0

hy,我正在开发一个 wordpress 插件,在该插件中我需要使用复选框删除多个项目。当我检查所有行并删除它们时,我会以 json 字符串的形式获取它们的行 ID。js代码:

$('.check_it:checked').each(function (i){
                            c[i]=$(this).val();                         
                        });         

                        var chk = JSON.stringify({ list: c });
                        debugger

                        $.ajax({
                                        type:"POST",
                                        data: chk,
                                        url:'/word/wp-content/plugins/craiglist/action.php?action=delete_leads',
                                        dataType: "json",
                                        success:function(response){
                                                            alert('fdsfsfdsfd');                    
                                            },  
                                        failure:function (response) {
                                                alert("Please Try Again");
                                            },
                                        error:function (xhr, status, error) {

                                                alert(xhr.response);           
                                            }
                                    });

在 var chk 我得到了类似的字符串

"{"list":["151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175"]}"

我如何在 php 中的服务器端获取它并将其发送到数据库,以便我可以删除所谓的行。

4

2 回答 2

0

因为您将 JSON 作为发布数据发送,所以您必须在 PHP 端访问原始发布数据。这可以这样做:

$obj = json_decode($HTTP_RAW_POST_DATA);
foreach($obj->list as $item)
{
    // delete from mytable
    $wpdb->query( 
        $wpdb->prepare("DELETE FROM mytable WHERE id = %d", $item)
    );
}

如果您想要$_POST变量中的数据,那么您必须将您的 ajax 请求数据更改为:

$.ajax({
    ....
    data: { list : JSON.stringify(c) },
    ....

现在,在 PHP 方面,它存在于$_POST['list']. 所以你可以这样做:

$obj = json_decode($_POST['list']);
foreach($obj->list as $item)
{
    // delete from mytable
    $wpdb->query( 
        $wpdb->prepare("DELETE FROM mytable WHERE id = %d", $item)
    );
}
于 2013-10-17T13:56:22.957 回答
0

在你的服务器端 php 中,因为你没有调用 get_header() 函数,你必须手动添加这段代码require_once('../../../wp-load.php');,你现在可以调用 global $wpdb; 安全和所有 wp 功能。另请注意,您的 php 文件必须与您的 functions.php 和其他核心文件一起在您的主题中。不要将其放入主题内的另一个目录中

于 2013-10-17T14:58:07.063 回答