2015-05-25 16:48
浏览 59

如何阻止jQuery ajax添加斜杠到JSON字符串?

I am sending stringified JSON object to a wordpress action

console.log( JSON.stringify(alloptions) );

    type: "post",
    dataType: "json",
    url: ajaxurl,
    processData: false,
    data: {
        'action': 'create_preset',
        'preset': JSON.stringify(alloptions)
    success: function( response ) {

        console.log( response );


the console log of the stringified object before sent via ajax is this

so the string is correctly processed ,

but on the other side it comes out with slashes

function _create_preset(){

    if(!is_admin() && !isset($_POST['preset'])) return;



add_action("wp_ajax_create_preset", "_create_preset");



I know I can use

stripslashes( $_POST['preset'] )

to clean it up but that is what I am trying to avoid. I need the JSON string to be sent to the action as it is before the ajax, without slashes.

any help is appreciated!

and magic quotes is not on


Jesse nailed it and WP was causing the trouble. Since the wp_unslash() is on its way to fix this in 5.0 I added this to my code

global $wp_version;
$new_preset_options = $_POST['preset'];

if ( version_compare( $wp_version, '5.0', '<' ) ) {

    $new_preset_content = wp_unslash( $new_preset_options );


    $new_preset_content = $new_preset_options ;
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douyu0845
    douyu0845 2015-05-25 17:20

    WordPress made the decision a long time ago to auto add slashes to all global input variables ($_POST, etc). They pass it through an internal wp_slash() function. The official recommended way to remove these slashes is to use their provided wp_unslash:

    wp_unslash( $_POST['preset'] );

    Here is the codex reference.

    **Note: It looks like this might be getting fixed in version 5.0, where they will be doing the wp_unslash for you when you request values from the global input variables.

    点赞 评论