首页 > 解决方案 > Api 休息链接和 javascript 弹出窗口

问题描述

有人能告诉我我在这个链接中可能做错了什么吗?

我确保当我点击弹出按钮时,我取消了订阅,但我没有得到弹出窗口的回报。

在我的带有 sweetalert2 的 javascript 代码下面,我相信错误在 DATA 部分,但我无法解决它。

             <script type="text/javascript">
    jQuery(document).ready(function($) {
        $('.submit-acoes-pausar-<?php echo $today_conferir = date('Y-m-d', strtotime($date_calc)); ?>')
                                .click(
                                    function() {
            var id = $(this).data("id");
            (async () => {
                const { value: cancelamento } = await Swal.fire({
                    title: 'IMPORTANTE',
                    text: 'Deseja realmente CANCELAR TODOS os pedidos desta assinatura a partir da data selecionada?',
                    input: 'textarea',
                    inputPlaceholder: 'Coloque sua mensagem aqui...',
                    showConfirmButton: true,
                    showCancelButton: true,
                    confirmButtonText: 'Cancelar',
                    confirmButtonColor: '#ff0000',
                    cancelButtonText: 'Voltar',
                    cancelButtonColor: '#d3d3d3',
                })

                if (cancelamento) {
                     //alert(id);
                     //Swal.fire(`Preço: ${price}`)
                    $.ajax({
                        url: "' . get_site_url() . '/wp-json/oinb/v1/add/cancelamento",
                        type: "POST",
                        dataType: "json",
                        headers: {
                            "Access-Control-Allow-Origin": "*"
                        },
                        data: {
                          "id_lista": id,
                          "dt_ppa": dt,
                          "acao_ppa": acao,
                          "id-cliente": cliente,
                        },
                        success: function (data) {
                            if (data["success"]==true) {
                                Swal.fire({
                                    icon: "success",
                                    title: "Sucesso",
                                    title: data["message"]
                                })
                            } else {
                                Swal.fire({
                                    icon: "error",
                                    title: "Oops...",
                                    text: data["message"]
                                })
                            }
                        },
                        error: function (data) {

                            Swal.fire(
                                "Ocorreu um erro",
                                `valor: ${cancelamento} | data-id: ${message}`,
                                "error"
                            )

                        }
                    });
                }
            })()
        });
    });
</script>';

API

API 已经在工作了,我只需要在弹出窗口中实现它

  <?php

$dir = plugin_dir_path(_DIR_);
include_once($dir . 'emails/custom-mail.php');
require_once($dir . "utils/functions.php");

add_action(
    'rest_api_init',
    function () {
        register_rest_route(
            'oinb/v1',
            '/add/cancelamento',
            array(
                'methods' => 'POST',
                'callback' => 'add_cancelamento',
            )
        );
    }
);

function add_cancelamento(WP_REST_Request $request)
{
    $id_lista = $request['id_lista'];
    $dt_ppa = $request['dt_ppa'];
    $acao_ppa = $request['acao_ppa'];
    $date_now = date('d/m/Y');
    $user_id = get_post_meta($id_lista, 'id-cliente', true);
    $user_info = get_userdata($user_id);
    $user_email = $user_info->user_email;

        $new_assinatura = array(
            'post_status' => 'publish',
            'post_type'      => 'acaoprogramada',
            'post_title' => 'AçãoProgUser:' . $user_id . 'ListaDeCompras:' . $id_lista . '-Date:' . $dt_ppa,
            'meta_input' => array(
                'id_lista' => $id_lista,
                'dt_programada' => $dt_ppa,
                'frequencia' => '',
                'status_ass' => $acao_ppa,
                'dt_add' => $date_now,
                'dt_edit' => $date_now,
            )
        );
        $create_cancelamento = wp_insert_post($new_assinatura);

        if ($create_cancelamento > 0){

            $to = $user_email;
            $subject = 'Sua Assinatura de Orgânicos será CANCELADA!';
            $titulo_email = 'Sua assinatura foi cancelada';
            $texto_email = 'Sua assinatura foi cancelada com sucesso. Caso deseje reativá-la, <a href="https://www.organicosinbox.com.br/minha-conta/">clique aqui</a> e volte a receber sua cesta a qualquer momento.<br/>Gratidão e até breve!';
            //$texto_email = 'De acordo com os ajustes que você realizou no nosso site, a sua lista de compras será desativada no dia '.$dt_ppa_oriiginal.'. Caso deseje reativar basta acessar sua conta  e cancelar o cancelamento.';
            $body = customFormatMailOinb($titulo_email, $texto_email);
            $headers = array('Content-Type: text/html; charset=UTF-8');
            wp_mail($to, $subject, $body, $headers);

            print json_encode(array('success' => true, 'message' => 'Cancelamento efetuado'));
        } else {
            print json_encode(array('error' => false, 'message' => 'Cancelamento NÃO efetuado'));
        }
        
}

标签: javascriptphpwordpressapirest

解决方案


您确定Swal.firepromise 以“值”对象键的形式返回其结果吗?

我会尝试一个

Swal.fire({
  title: 'TEST',
  text: "blabla",
  icon: 'warning',
  showCancelButton: true,
  confirmButtonColor: '#3085d6',
  cancelButtonColor: '#d33',
  confirmButtonText: 'Unsubscribe'
}).then(result => { console.log(result)})
.catch(error => { console.log(error) })

然后检查返回的结果对象。

另外我不会使用await阻塞语句,JS本质上是异步的。此外,您实际上并不需要继续向用户显示模式,因为您将触发另一个警报反馈来判断操作是否成功。


推荐阅读