Отправка данных через jQuery Ajax в виде JSON в PHP Rest API с помощью cURL - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужно отправить некоторые данные в REST API и включить пользовательское значение заголовка. Я пытаюсь отобразить данные, которые отправляю через скрипт cURL, но получаю пустую страницу. Вот мой HTML

<form id="RestData" action=Processor.php" method="POST">
    <ul>
        <li>
            <input type="text" id="email" name="email">
        </li>
        <li>
            <input type="submit" value="Update User" id="">
        </li>
    </ul>
</form>

мой JQuery:

$(function(){
    $('#RestData').validate({
        errorPlacement: function(error, element) {},
        submitHandler: function(form) {
            $.ajax({
                type:$('#RestData').attr('method'),
                url: form.action,
                data: {
                    email = $('#email').val();
                },
                beforeSend: function(data){
                    console.log(data);
                },
                success: function(data){
                    console.log(data);
                    if(data.type == "error") {
                        //error handling
                    } else if(data.type == "success"){
                        //success handling
                    } 
                }
            });
                return false;
        },
        rules: {
            email: {
                required:true,
                email:true
            }
        }
    });
});

В этот момент я получаю двойные кавычки вокруг моего массива json, когда выводю его через процессор PHP

<?php
    $email = $_POST['email'];
    $expired = NULL;
    $funded = TRUE;

    $data = array(
        "email" => $email,
        "expired" => $expired,
        "funded" => $funded
    );
    echo json_encode($data);
?>

вот так -> {"email": "test@test.com", "expired": null, "funded": true} Я не знаю, будет ли это проблемой или нет, есть мысли о том, как удалить, если это необходимо?

С моим окончательным кодом cURL ничего не происходит - пустой экран и ничего на панели сети для ответа.

<?php
    $email = $_POST['email'];
    $expired = NULL;
    $funded = TRUE;

    $data = array(
        "email" => $email,
        "expired" => $expired,
        "funded" => $funded
    );

    $url = 'https://rest.api';

    $json_string = json_encode($data);

    $headers = array (
        "Content-Type: application/json; charset=utf-8",
        "Content-Length: " .strlen($json_string),
        "Authorization: Bearer long token here"    
    );

    $channel = curl_init($url);
    curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($channel, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($channel, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($channel, CURLOPT_POSTFIELDS, $json_string);
    curl_setopt($channel, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($channel, CURLOPT_CONNECTTIMEOUT, 10);

    curl_exec($channel);
    $statusCode = curl_getInfo($channel, CURLINFO_HTTP_CODE);
    curl_close($channel);    
    return $statusCode;
    echo $json_string;
?>

Это немного за пределами моей рулевой рубки, я часто использую cURL, просто не для API отдыха. Я знаю, что должен получить ответ, и пытаюсь отобразить его на странице в целях отладки, но я просто получаю пустую страницу.

1 Ответ

0 голосов
/ 13 ноября 2018

Вы не получаете ответ cURL в переменной.

Во-вторых, вы выполняете echo после оператора return, который никогда не будет выполнен.

<?php
    $email = $_POST['email'];
    $expired = NULL;
    $funded = TRUE;

    $data = array(
        "email" => $email,
        "expired" => $expired,
        "funded" => $funded
    );

    $url = 'https://rest.api';

    $json_string = json_encode($data);

    $headers = array (
        "Content-Type: application/json; charset=utf-8",
        "Content-Length: " .strlen($json_string),
        "Authorization: Bearer long token here"    
    );

    $channel = curl_init($url);
    curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($channel, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($channel, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($channel, CURLOPT_POSTFIELDS, $json_string);
    curl_setopt($channel, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($channel, CURLOPT_CONNECTTIMEOUT, 10);

    $response = curl_exec($channel);
    $statusCode = curl_getInfo($channel, CURLINFO_HTTP_CODE);
    curl_close($channel);

    http_response_code($statusCode);
    if ( $statusCode != 200 ){
       echo "Status code: {$statusCode} \n".curl_error($channel);
    } else {
       echo $response;
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...