WP_AJAX操作响应为0

时间:2014-09-23 作者:Hyque

我正在写一个插件。有一个按钮可以触发ajax请求,以执行我在插件页面中添加的操作:

我的插件PHP文件的标题:

add_action(\'wp_ajax_update_nav_items\', \'update_nav_items\' );
add_action(\'wp_ajax_nopriv_update_nav_items\', \'update_nav_items\' );

wp_enqueue_script( \'addItemToNav\', plugin_dir_url( __FILE__ ) . \'js/navFunctions.js\', array( \'jquery\', \'json2\' ) );
wp_localize_script( \'addItemToNav\', \'menuItems\', array(
    // URL to wp-admin/admin-ajax.php to process the request
    \'ajaxurl\'          => admin_url( \'admin-ajax.php\' ),
    // generate a nonce with a unique ID "myajax-post-comment-nonce"
    \'postCommentNonce\' => wp_create_nonce( \'update_nav_items-nonce\' ),
    \'action\' => \'update_nav_items\'
    )
);
function update_nav_items() { 
    // Testing stuff 
    $response = json_encode( array( \'response\' => \'success\', \'html\' => \'some value\' ) );
    ob_clean();
    print_r( $response );
    echo json_encode( $response );

    die();
}
我的JavaScript触发:

var data = {
    action: \'update_nav_items\',
    postCommentNonce : menuItems.postCommentNonce,
    menuitems: JSON.stringify(itemtest)
};

jQuery.ajax({ 
    url: menuItems.ajaxurl, 
    data: data,  
    type: \'post\',
    dataType: \'json\',
    success: function( response ) {
        console.log(response);
    }
}); 
在浏览器控制台中,将请求发送到正确的url,包括以下参数:

action  update_nav_items
menuitems   {"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}
postCommentNonce    0cee7325b3
(menuitems仅用于使用正确的JSON进行测试)

我得到的是response is 0, 因此,行动似乎存在问题。我就是找不到。我已经尝试在我的函数中添加操作。php,它仍然不起作用。

有人有线索吗?

3 个回复
SO网友:lippoliv

将wp\\u localize\\u script-Call更改为正确的操作:

wp_localize_script( \'addItemToNav\', \'menuItems\', array(
    // URL to wp-admin/admin-ajax.php to process the request
    \'ajaxurl\'          => admin_url( \'admin-ajax.php\' ),
    // generate a nonce with a unique ID "myajax-post-comment-nonce"
    \'postCommentNonce\' => wp_create_nonce( \'update_nav_items-nonce\' ),
    \'action\' => \'wp_ajax_update_nav_items\'
    )
);
作为“操作”,您当前输入了函数名,但这是错误的。您注册的调用函数的操作具有不同的名称。

SO网友:lippoliv

AJAX请求需要返回JSON。但我认为您的函数不会返回有效的JSON。

尚未对其进行测试,但此功能应能正常工作:

function update_nav_items() { 
    // Testing stuff 
    $response = json_encode( array( \'response\' => \'success\', \'html\' => \'some value\' ) ); // first JSON encode
    ob_clean();

    die(json_encode( $response )); // second JSON encode
}
为了测试它,您可以手动调用URL并查看返回的字符串,无论它是否是有效的JSON。

你好lippoliv

SO网友:Sajidur Rahman

请遵循代码:

add_action( \'wp_ajax_add_myfunc\', \'prefix_ajax_add_myfunc\' );
add_action( \'wp_ajax_nopriv_add_myfunc\', \'prefix_ajax_add_myfunc\' );

function prefix_ajax_add_myfunc() {
    // Handle request then generate response using WP_Ajax_Response
}
在ajax调用中,请执行以下操作:

jQuery.post(
    ajaxurl, 
    {
        \'action\': \'add_myfunc\',
        \'data\':   \'foobarid\'
    }, 
    function(response){
        alert(\'The server responded: \' + response);
    }
);
在ajax调用中,您将调用函数prefix_ajax_. 只剩下电话了。那样的话add_myfunc. 在它将发送的响应中done 如果一切顺利。否则响应将为0-1.

希望这会有所帮助。非常感谢。

结束

相关推荐

使用AJAX按自定义字段过滤自定义帖子类型

我有一些用WP类型创建的自定义帖子类型(书籍、电影等)。然后,我用ACF创建了一个名为“流派”的自定义字段。如果用户从frontpage的下拉列表中选择“Books”,他将进入一个显示所有可用图书的存档页面。我现在想要的是在归档页面上创建一个下拉列表,列出“Books”中可用的所有流派。当用户从下拉列表中选择流派时,必须使用AJAX过滤帖子。我已经尝试了几个小时,但没有成功地让这个过滤插件工作,它似乎正是我所需要的:http://luis-almeida.github.io/filtrify/我知道这样的