Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将变量从PHP传递到AJAX成功函数_Javascript_Php_Jquery_Ajax_Wordpress - Fatal编程技术网

Javascript 将变量从PHP传递到AJAX成功函数

Javascript 将变量从PHP传递到AJAX成功函数,javascript,php,jquery,ajax,wordpress,Javascript,Php,Jquery,Ajax,Wordpress,我的目标是使用AJAX更新WordPress帖子。到目前为止,我的代码是: 脚本: $.ajax({ type: 'POST', url: ajax_url, data: { 'action': 'wp_post', 'ID': post_id, 'post_title': post_title }, success: function( data ) { $( '.message' ) .a

我的目标是使用AJAX更新WordPress帖子。到目前为止,我的代码是:

脚本:

$.ajax({
    type: 'POST',
    url: ajax_url,
    data: {
        'action': 'wp_post',
        'ID': post_id,
        'post_title': post_title
},
success: function( data ) {
        $( '.message' )
        .addClass( 'success' )
        .html( data );
},
error: function() {
        $( '.message' )
        .addClass( 'error' )
        .html( data );
    }       
});
function wp_post() {

    $post['ID'] = $_POST['ID'];
    $post['post_title'] = $_POST['post_title'];
    $post['post_status'] = 'publish';

    $id = wp_update_post( $post, true );

    if ( $id == 0 ) {
        $error = 'true';
        $response = 'This failed';
        echo $response;
    } else {
        $error = 'false';
        $response = 'This was successful';
        echo $response;
    }

}
PHP:

$.ajax({
    type: 'POST',
    url: ajax_url,
    data: {
        'action': 'wp_post',
        'ID': post_id,
        'post_title': post_title
},
success: function( data ) {
        $( '.message' )
        .addClass( 'success' )
        .html( data );
},
error: function() {
        $( '.message' )
        .addClass( 'error' )
        .html( data );
    }       
});
function wp_post() {

    $post['ID'] = $_POST['ID'];
    $post['post_title'] = $_POST['post_title'];
    $post['post_status'] = 'publish';

    $id = wp_update_post( $post, true );

    if ( $id == 0 ) {
        $error = 'true';
        $response = 'This failed';
        echo $response;
    } else {
        $error = 'false';
        $response = 'This was successful';
        echo $response;
    }

}
正如您所看到的,我的PHP函数中的
$response
变量被传递到脚本中的success函数,页面上显示了
$response
的值

我想修改我的成功函数以执行以下操作:

success: function( data ) {
    if( $error == 'true' ) {
        // do something
    } else {
        // do something else
    }
},
success: function( data ) {
    var error = '';
    var something = '';
    for(var i = 0; i < data.length ; i++)
    {
        error = data[i].error;
        something = data[i].something;
    }
    if( error ) {
        // do something
    } else {
        // do something else
    }
},
问题是,我无法将PHP函数中的
$response
$error
变量传递到scipt中的success函数

  • 有人能告诉我如何将
    $response
    $error
    传递给脚本的成功函数吗
  • 我是否应该采取更好的方法

  • 我是AJAX新手,如果问题很简单,请原谅。

    javascript变量数据包含您的回音$response变量。以你的例子来说,是这样的。确保在ajax函数中也要求使用html作为返回数据。以下是关于这方面的文件:


    你要找的是

    这会将PHP数组转换为JSON

    例如:

    $dataArray = array( 'message' => 'Error', 'data' => data);
    echo json_encode($dataArray);   
    

    不能在JavaScript中直接使用PHP变量。您所能做的最好的事情就是在JavaScript代码中操纵PHP输出


    例如,您可以将
    $response
    打印为“error”或“no_error”-并在AJAX回调中检查
    var data
    是否不等于“error”(例如)。

    您可以在后端创建一个类似于此的
    JSON
    数组:

    $arr = array('error' => true, 'something' => 'foo');
    echo json_encode($arr);
    
    然后解析json数组以获取返回值,如下所示:

    success: function( data ) {
        if( $error == 'true' ) {
            // do something
        } else {
            // do something else
        }
    },
    
    success: function( data ) {
        var error = '';
        var something = '';
        for(var i = 0; i < data.length ; i++)
        {
            error = data[i].error;
            something = data[i].something;
        }
        if( error ) {
            // do something
        } else {
            // do something else
        }
    },
    
    成功:函数(数据){
    var错误=“”;
    var某物=“”;
    对于(变量i=0;i
    当您将数组从后端回显到前端时,您不能简单地访问JavaScript中的PHP变量


    请注意,可能存在语法错误,因为我没有测试它。

    您应该将php脚本的响应编码为json,如下所示:

    function wp_post() {
    
        $post['ID'] = $_POST['ID'];
        $post['post_title'] = $_POST['post_title'];
        $post['post_status'] = 'publish';
    
        $id = wp_update_post( $post, true );
    
        $response = array();
    
        if ( $id == 0 ) {
            $response['status'] = 'error';
            $response['message'] = 'This failed';
        } else {
            $response['status'] = 'success';
            $response['message'] = 'This was successful';
        }
    
        echo json_encode($response);
    
    }
    
    然后,在javascript代码中:

    success: function( data ) {
        if( data.status == 'error' ) {
            // error handling, show data.message or what you want.
        } else {
            // same as above but with success
        }
    },
    
    success: function( data ) {
    
        console.log(data);
    
        var data = $.parseJSON(data);
    
        if( data.status == 'error' ) {
            // do something
        } else {
            // do other thing
        }
    }
    
    如果您使用:

    echo json_encode($response);
    
    在.php函数中,请记住使用:

    var data = $.parseJSON(data);
    
    关于你的ajax成功

    例如:

    function php_ajax_function() {
    
        // whatever you want to do...
    
        $response = array();
    
        if ( $id == 0 ) {
            $response['status'] = 'error';
            $response['message'] = 'This failed';
        } else {
            $response['status'] = 'success';
            $response['message'] = 'This was successful';
        }
    
        echo json_encode($response);
    }
    
    然后,在javascript代码中:

    success: function( data ) {
        if( data.status == 'error' ) {
            // error handling, show data.message or what you want.
        } else {
            // same as above but with success
        }
    },
    
    success: function( data ) {
    
        console.log(data);
    
        var data = $.parseJSON(data);
    
        if( data.status == 'error' ) {
            // do something
        } else {
            // do other thing
        }
    }
    


    为什么不使用标准的http结果代码,而不是在协议的基础上重新创建协议呢?谢谢njzk2——正如我所说,我对AJAX是新手。有没有可能提供一个示例来说明如何执行此操作?将响应编码为JSON对象。查看PHP中的
    json\u encode
    和JavaScript中的
    json.parse
    。用于设置失败代码,这将使您进入ajax错误函数。njzk-谢谢,我会看一看,这对我来说非常好,我一直使用此方法。既然我有html格式,我就不必使用json或其他任何东西,我只需要从php传递一条语句,它就工作得很好。嗨,pathfinder,谢谢你的帮助。当我只需要一个变量时,我会记住你的方法。很好,很简单。数据是一个对象,而不是一个字符串。如果您希望,数据就是一个字符串。如果你看一下原始的php,他传递的是一个简单的字符串。我的功能运行正常,你们都会不假思索地点击。你的也可以,但它会使代码膨胀。如果你说这个答案是错误的,那么你就限制了你努力做正确的事情的可能性。你的答案甚至没有回答他的问题。为什么要批评呢。这让stackoverflow成为我生活中的一大烦恼。问题是:“我想修改我的成功函数来做这样的事情:“Stack Overflow并不是要给出100%的工作代码,即使它在可能的情况下是很好的,而这正是OP想要的,如果他必须对给他的小费做一些研究,这没什么大不了的。你和phil告诉他要做不必要的步骤。谢谢taxicala-我需要在我的$.ajax()中添加数据类型吗?如果你这样做会更好:)很高兴我能帮到你!如果不添加数据类型,jquery将不知道它是否是json。您还可以在php脚本的顶部使用
    标题('content-type:text/json')执行此操作
    如果要在php中传递一个字符串,则完全没有必要遍历整个json过程,只要javascript ajax函数要求返回html.pathfinder中的数据,我将尝试传递两个字符串$回答和$error他只需要一个,不管是好是坏。为什么代码膨胀?但你们可以抓住要点。现在,我将继续使用紧凑的代码赚钱。我真的很讨厌堆栈溢出的情况。它现在就像一个电子游戏。探路者-不,我需要2。我需要“它是好是坏”和“信息”,你可以发送任意多的变量,亨利,有什么问题吗?