在Wordpress自定义主题上的Ajax请求上获取错误400

时间:2019-07-01 20:02:02

标签: php jquery ajax wordpress

我正在写一个Wordpress自定义主题,在其中一个页面中,我有一个带有两个选择和一个提交按钮的表单。基本上,用户可以选择两个城市并检查它们之间是否有路线。 我正在使用“高级自定义字段关系”字段来链接城市(城市是一种职位类型)。 问题是我总是遇到400错误,我无法弄清楚是什么问题。

我检查了这里找到的其他解决方案,但似乎没有一个适合我。

admin-ajax.php:

add_action('wp_ajax_check_route', 'check_route');
add_action('wp_ajax_nopriv_check_route', 'check_route');

function check_route() {
    $id_cidade_origem = intval($_REQUEST['cidade_origem']);
    $id_cidade_destino = intval($_REQUEST['cidade_destino']);

    $cidades_atendidas = get_field('regioes_atendidas', $id_cidade_origem);

    $tem_relacao = False;
    foreach ($cidades_atendidas as $cidade) {
        if($cidade->ID == $id_cidade_destino){
            $tem_relacao = True;
            break;
        }
    }
    $data = array(
        'success' => true,
        'tem_relacao' => true
    );
    wp_send_json_success($data);
    $data = array(
        'success' => false
    );
    wp_send_json_error($error_data);
}

scripts.js:

jQuery("#regioes-botao").click(function (){
        console.log("Clicou!");
        jQuery.ajax({
            type: "POST",
            url: "/wp-admin/admin-ajax.php",
            data: {
                action: 'check_route',
                cidade_origem: jQuery('#select-from').find(":selected").val(),
                cidade_destino: jQuery('#select-to').find(":selected").val(),
            },
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (output) {
               console.log('sucesso!')
               console.log(output);
               var resposta = output.tem_relacao;
               if(resposta == true){
                    jQuery('#resposta span').text("Nós fazemos esta rota, entre em contato.")
               }else{
                    jQuery('#resposta span').text("No momento não fazemos esta rota, mas já estamos trabalhando para que seja possível em breve.")
               }
            },
            error: function(output){
                console.log(output)
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

错误代码400表示服务器无法理解您的原始请求。请尝试以下书面代码:

$.ajax({
    url: ajax_object.ajax_url, //Used wp_localize_script to pass ajax url to wordpress. Example is at https://codex.wordpress.org/AJAX_in_Plugins
    type: 'POST',
    data: { 
        'action': 'check_route', 
        'cidade_origem': jQuery('#select-from').find(":selected").val(),
        'cidade_destino': jQuery('#select-to').find(":selected").val(), 
    },
})
.done(function(response) {
    console.log(response);
})
.fail(function() {
})
.always(function() {
});

请注意,我仅定义了请求类型,要调用的url和要发送的数据。我很确定这应该可行,因为我在许多项目中都使用了它。