如何正确使用wp.ajax.post?

时间:2017-08-31 作者:luukvhoudt

在使用wp-utils函数send和post努力保持安静之后。毕竟,我没能让其中一个正常工作。

但我确实设法得到了回应,但我不知道为什么这是有效的,而我尝试的其他东西却没有。

对于本主题,PHP不相关。为了避免任何混淆,请考虑我正在使用以下PHP:

add_action(\'wp_ajax_example_action\', function() {
   if (!empty($_REQUEST[\'foo\'])) {
       print \'Foo: \'.$_REQUEST[\'foo\'];
   }
   wp_die();
});
javascript始终在触发的php函数中返回所有打印/回显文本,无论满足什么条件。

$(\'.some-button\').click(function(e)) {
    e.preventDefault();
    window.wp.ajax.send(\'example_action\', {
        data: { foo: $(\'.some-field\').val() },
        error: function( response ) {
            console.log(response)
        }
});
下面是一个简单测试的结果:

|================================================|
| $(\'.some-field\').val() | console.log(response) |
|------------------------|-----------------------|
| "bar"                  | "Foo: bar"            |
| ""                     | "Foo: "               |
|================================================|
我试了很多东西send() 方法以及post() 方法但是,除非与上面的javascript完全相同,否则似乎什么都不起作用。是的,它只适用于财产error 不适用于donesuccess 都没有failalways.

请看一下下面的代码,我将解释不返回响应的代码会发生什么情况。

let post = window.wp.ajax.post(\'example_action\', { foo: $(\'.some-field\').val() });

console.log(post);
// logs: {state: ƒ, always: ƒ, then: ƒ, promise: ƒ, pipe: ƒ, ...}

post.done(function(v) {
    // won\'t be executed
    console.log(v);
});
然而,在我的开发人员工具的网络部分,请求和响应被正确显示。

1 个回复
SO网友:Jeg Bagus

wp.ajax.post 需要你用wp_send_json_success. 它将在json响应上添加带有成功标志的额外参数。

结束