Запрос AJAX не работает. Ошибка 400 и решения политики CORS не работают - PullRequest
0 голосов
/ 18 января 2019

Задача состоит в проверке определенного идентификатора, который новый клиент вводит в поле ввода текста HTML во время регистрации. Новому клиенту разрешается регистрироваться только в том случае, если в поле ввода 5 номеров, а номер передан существующему участнику (также должно появиться окно с предупреждением).

Так что это в моем .js файле. Следующий параметр reg_sub является значением ввода от пользователя.

function checkSubscriberIdValidation( reg_sub )
{   

    if( reg_sub.length == 5)
    {
        console.log(reg_sub);
        jQuery.ajax({
        url: specialStrings.ajax_url,
        type: "GET",
        data: ({action: 'checkCUID', cuID: reg_sub}),
    success: function(result){
            console.log(result);
    },
    error: function(e){
        console.log(e);
    }); 
    }
}

Я пытаюсь вызвать следующий код из файла с именем: checkCUID.php

<?php
if( isset($_GET['cuID']) )
{
    if(!defined("ABSPATH")){
        define( 'ABSPATH', $_SERVER['DOCUMENT_ROOT'].'/');
    }
    try
    {   
        require_once dirname(__FILE__).'/../library.php';
        $service  = Company::getService('CustomerService');
        $response = $service->validateCUID($_GET['cuID']);

        if($response == false)
    {
        return;
        {
        else
        {
            echo '0'; 
        }
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
}
else
{
    echo '0';
}

Итак, функция validateCUID(); работает, потому что я также тестирую ее с помощью SOAP UI и всегда получаю истинное значение (если я вставлю действительный идентификатор).

Итак, это мой ответ в консоли (число и ошибка GET 400):

99999
GET https://domain.de/wp-admin/admin-ajax.php?action=checkCUID&cuID=99999 400 

Я пытался вставить в:

jQuery.ajax({
    contentType: "application/json; charset=utf-8", 
    dataType: "json",
})

но теперь я получил ошибку:

Access to XMLHttpRequest at 'https://domain.de/wp-admin/admin-ajax.php?action=checkCUID&cuID=99999' from origin 'http://domain.de' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

Я попытался изменить content-type на text/html, как показано в admin-ajax.php. Я увидел, что исходный домен начинается с http , а не с https , и проверил home и siteurl в phpMyAdmin , и это https там.

Кто-нибудь знает решение? Мое предположение: мой код - дерьмо, я все еще учусь, и я так устал. Мне очень жаль за этот длинный выпуск ^^!

1 Ответ

0 голосов
/ 19 января 2019

Я заметил, что вы используете WordPress, попробуйте использовать его в плагине или в вашем шаблоне functions.php:

add_filter( 'allowed_http_origins', 'add_allowed_origins' );
function add_allowed_origins( $origins ) {
    $origins[] = 'https://site1.example.com';
    $origins[] = 'https://site2.example.com';
    return $origins;
}

, где каждый URL-адрес - это URL-адрес веб-интерфейса, которому разрешено запрашивать сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...