如何通过AJAX从jQuery中的PHP获取值

时间:2012-11-12 作者:mnewmedia

I\'m trying to get a value from a PHP function through Ajax and save it in a variable in jquery.

PHP;

add_action( \'wp_ajax_mark_as_read\', array( &$this, \'readen_color\' ) );

public function readen_color() {
   if( isset( $_POST[\'post_id\'] ) && is_numeric( $_POST[\'post_id\'] ) ) {
      echo \'hello\';
   }
}
Jquery:

$(document).ready(function(){
alert (\'Test\');
var sArticleId, iPostId;

// Get the article ID and split it - 
sArticleId = $("article").attr(\'id\');
iPostId = parseInt(sArticleId.split(\'-\')[1]);

$.post(ajaxurl, {
 action:\'readen_color\',
 post_id: iPostId
}, function (response) {
console.log(response);

var response = parseInt(response);
alert(\'value of response: \' + response);            
});
});
知道我做错了什么吗?

无法回答我自己的问题,但现在它适用于:

var responsevar = response;
alert(\'The Server Responses: \' + responsevar);
而不是:

var response = parseInt(response);
alert(\'value of response: \' + response); 

2 个回复
最合适的回答,由SO网友:pbd 整理而成

您正在传递“readen\\u color”作为操作参数,但您已将ajax操作定义为“mark\\u as\\u read”。

尝试以下操作:

$.post(ajaxurl, {
    action:\'mark_as_read\',
    post_id: iPostId
}, function (response) {
    console.log(response);
});
至于您的PHP:

add_action( \'wp_ajax_mark_as_read\', array( &$this, \'readen_color\' ) );
// Add no_priv if you want users not logged in to be able to call the function.
add_action( \'wp_ajax_no_priv_mark_as_read\', array( &$this, \'readen_color\' ) );

public function readen_color() {
    if( isset( $_POST[\'post_id\'] ) && is_numeric( $_POST[\'post_id\'] ) ) {
        // You must call die to avoid the trailing 0 in the response.
        die(\'hello\');
    }
}

SO网友:kaiser

AJAX(&A);“本地化”数据最初将数据从PHP传递到JS只是为了与本地化一起使用,因此函数名为。现在,人们普遍接受,可以使用它来传输数据,也可以用于AJAX调用。下面是一个关于如何“本地化”脚本别名的示例:从php获取数据到JS。

$this->handle = \'awesomescript\';
$this->action = \'awesomeaction\';

wp_enqueue_script(
     $this->handle
    ,plugin_dir_url( __FILE__ ).\'/js/ajax.js\'
    ,array(
         \'jquery\'
        ,\'jquery-ui-autocomplete\'
     )
    ,filemtime( plugin_dir_path( __FILE__ ).\'/js/ajax.js\' )
    ,true
);

wp_localize_script(
     $this->handle
    ,"{$this->handle}_obj"
    ,array(
         \'ajaxurl\'    => admin_url( \'admin-ajax.php\' )
        ,\'_ajax_nonce\' => wp_create_nonce( $this->nonce )
        ,\'action\'     => $this->action
        ,\'data\'       => array(
             \'some_key\'  => $some_value
            ,\'other_key\' => $some_other_value
         )
        ,\'debug\'      => $this->debug_js
     )
);
\\u注意:这是从我的一个插件的类中获取的,因此您必须替换$this->foo 与你自己的部分。

如果要使用AJAX传递数据,只需注册对操作的回调(私有/管理或公共):

add_action( "wp_ajax_{$this->action}", array( $this, \'ajax_cb\' ) );
add_action( "wp_ajax_nopriv_{$this->action}", array( $this, \'ajax_cb\' ) );
然后,您可以轻松地修改结果(或执行查询或任何您想到的操作)。

在JS中检索现在您可以调用awesomescript_obj 并可以访问所有数据(包括data 容器/阵列)。

结束

相关推荐

通过AJAX加载tinyMCE/wp_Editor()

Possible Duplicate:How to load wp_editor() through AJAX/jQuery 关于这一点有几个问题(like this, or that), 但没有一个能为我提供解决方案。情况:我有一个代谢箱。在这个元框中,我想动态添加tinyMCE编辑器。代码:PHP:add_action(\'wp_ajax_insert_tinymce\', \'insert_tinymce\'); function insert_tinymce(){ wp_