我应该如何从WordPress AJAX操作页面获取json编码的数据

时间:2016-08-30 作者:chetan

这是我的ajax脚本

<script> 

$(document).ready(function()
{
    $("#color-submit").click(function()
    {
        $.ajax(
    {
        async:false,
        type:"POST",
        url:"<?php echo plugins_url(\'/query/colorsubmit.php\',__FILE__);?>",
        data:$("#color-form").serialize(),
        dataType:\'json\',
        success:function(response)
        {
            alert(response.msg);//var object = JSON.parse(response);
            $(".jumbotron").css({"background-color":"#FF8745"});
            //alert(response[\'msg\']);
            var obj=response.msg;
            console.log(obj);
            }
        }
    );
        });

    });
</script>
这是我在WordPress中的ajax操作页面:

<?php
$return = array();
//include_once("../../../../wp-config.php");
global $wpdb;
$color_value=$_POST[\'color-field\'];
if($wpdb->query("UPDATE color_form SET color=\'$color_value\'"))
{
    $msg="Form Updated";
    }else
    {
        $msg="not form Updated";
        }

//$fetch_color=$wpdb->get_results("select color from color_form",ARRAY_A);

    //$return=$fetch_color;

$return[\'msg\']="sdgsdgsd";
echo json_encode($return);
// wp_send_json_success($return);
//wp_send_json($return);
//$wpdb->flush();
?>
那么,我应该如何从ajax操作页面获取数据呢?

如果我使用wp-config.php 我无法获取数据。如果我不使用它,我将无法运行查询。。。。。。。

1 个回复
SO网友:Tom J Nowell

到目前为止,发布的代码存在大量安全问题,其中大多数问题可以通过使用提供的各种API来解决。

如果您使用REST API,您需要的很多内容都可以大大简化:

<?php

add_action( \'rest_api_init\', function () { // only run this when the REST API says it\'s setting things up
    register_rest_route(
        \'chetan/v1\', \'/color/\', // our namespace and the name of the endpoint to call via AJAX, /wp-json/chetan/v1/color
        array(
            \'methods\' => \'POST\', // are you using GET POST PUT etc
            \'callback\' => \'chetan_rest_set_color\', // the function to call
            \'permission_callback\' => function () {
                return current_user_can( \'manage_options\' ); // admins only
            }
        )
    );
} );

function chetan_rest_set_color( \\WP_REST_Request $req ) {
    $color = esc_html( $_POST[\'color\'] );
    // set the colour
    // $result = ...
    return $result;
}
和javascript:

<script> 
jQuery(document).ready( function() {
    jQuery("#color-submit").click(function() {
        jQuery.ajax({
            async:false,
            type:"POST",
            url:"<?php echo home_url( \'/wp-json/chetan/v1/color/\' ); ?>",
            data: jQuery("#color-form").serialize(),
            dataType:\'json\',
            success:function(response){
                alert(response.msg);//var object = JSON.parse(response);
                jQuery(".jumbotron").css({"background-color":"#FF8745"});
                //alert(response[\'msg\']);
                var obj=response.msg;
                console.log(obj);
            }
        });
    });
});
</script>
注:这将需要PHP 5.3+和WordPress 4.5+。请记住,最早支持的PHP是v5。6,而WordPress当前为v4。6.

此外:

千万不要调用插件或主题中的PHP文件,这很危险,无论是通过AJAX还是表单提交。所有请求都应该通过WordPress(毕竟是CMS)

  • 始终检查权限,否则任何来自4Chan或reddit的随机joe都可能在未经您许可的情况下更改您的设置。如果颜色不是十六进制值,而是一段转储所有密码的SQL怎么办

    wp_localize_script( \'chetan_js\', \'chetan_js\', array(
        \'url\' => home_url( \'wp-json/chetan/v1\')
    ) );
    
    允许您删除javascript中的内联PHP,以便您可以这样做:

                type:"POST",
                url: chetan_js.url+"/color",
                data: jQuery("#color-form").serialize(),
    
    现在,您可以将javascript放在外部文件中,而不是将其内联

  • 相关推荐

    尝试在WordPress中实现AJAX注释,遇到WP错误

    我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i