在php-wordpress中获取服务器端的json字符串

时间:2013-10-17 13:49:07

标签: javascript php ajax wordpress jquery

hy,我正在制作一个wordpress插件,其中我需要使用checkbox删除多个项目。当我检查所有行并删除它时,我以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的服务器端获取它并将其发送到数据库,这样我就可以删除所谓的行。

2 个答案:

答案 0 :(得分: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)
    );
}

答案 1 :(得分:0)

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