WordPress心跳API无法解析数据

时间:2019-09-26 作者:markb

我想使用WP-API心跳来打开到两个显示器的连接,并让它们反映另一个显示器对每个显示器所说的话sendtick.

当心跳API在3.6中出现时,它曾经可以工作,但现在在最新版本中,它输出了一个错误:

SyntaxError: JSON Parse error: Unexpected identifier "SyntaxError"

我曾尝试在web上遵循其他答案来解析json错误,或找到它失败的地方,但除了返回与服务器响应相同的url之外,似乎什么都没有出来。

function mb_heartbeat() {
    wp_enqueue_script( \'heartbeat\' );
    add_action( \'wp_footer\', \'mb_heartbeat_footer\' );
}

//our js to send/process
function mb_heartbeat_footer() { ?>
<script>
$(document).ready( function() {

    // send the user id
    $(document).on( "heartbeat-send.mb-location-change", function( event, data ) {
        data.mb_user_id = $(\'input[name="mb_user_id"]\').val();
    });

    // receive the location
    $(document).on( "heartbeat-tick.mb-location-change", function( event, data ) {
        data.mb_user_location && $("input#mb_user_location" + data.location ).prop( "checked","checked" );
    });

    // log errors
    $(document).on( "heartbeat-error.mb-location-change", function( event, jqXHR, textStatus, error ) {
        console.log( textStatus + \' ----------- \' + error );
    })
});
</script>
<?php }

// server-side code
function mb_heartbeat_received( $response, $data, $screen_id ) {

    $mb_userid = ( empty($data[\'mb_user_id\']) || !is_numeric($data[\'mb_user_id\']) ? null : $data[\'mb_user_id\'] );

    $mb_userid = absint( $mb_userid );

    if( !$mb_userid ) {
        return $response;
    }

    $response[\'mb_user_location\'] = get_user_meta( $mb_userid, \'mb_user_location_current\', true );

    return $response;
}

// do it
add_action( \'init\',                 \'mb_heartbeat\'                  );
add_filter( \'heartbeat_received\',   \'mb_heartbeat_received\', 10, 2  );
add_filter( \'heartbeat_settings\',   \'mb_heartbeat_settings\'         );

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

不是百分之百确定这是不是原因,但你能尝试更换吗$ 具有jQuery?

我记得在过去的一个类似案例中看到过类似的情况。

SO网友:p13rnd

可能隐藏在某处的消息将是“$is not function”,因为jQuery没有正确绑定到客户端。

您可以使用jQuery代替之前建议的$,或者将心跳回调从php移到js文件中,并使用适当的绑定,例如:

(function ($) {
      ... your code here
})(jQuery);
我还建议不要使用wp\\u footer将脚本发送到客户端,除非有充分的理由。通过使用wp\\u enqueue\\u scripts挂钩,您可以确保脚本最终位于正确的位置。这还使您能够通过依赖关系控制脚本的加载顺序。

我注意到您在wp init挂钩中使用wp\\u enqueue\\u脚本,这可能会导致意外的结果,为了确保一切按预期工作,我建议根据需要更改为wp\\u enqueue\\u脚本或admin\\u enqueue\\u脚本。您可以在此处阅读有关这些挂钩的更多信息:

https://developer.wordpress.org/reference/functions/wp_enqueue_scripts/https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/

希望这有帮助。

最好的,塞博