Отправить запрос POST и получить ответ JSON на PHP? - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь отправить POST request via PHP from AJAX.Я проверил API с Postman.Работает нормально.Но это не выполняется в PHP.Он также не отображается на вкладке «Сеть».

Я видел множество примеров для выполнения запроса POST в переполнении стека и пробовал его.Но я не могу понять, где я ошибаюсь?

Я приложил здесь и JS-код, и PHP-код

JavaScript CODE

function editUser(toid, name, mobile, mail, pin, addr, state, dis, subdis, role, user) {

    $.ajax({
        type: "POST",
        url: "edituser.php",
        dataType: 'html',
        data: {
            id: toid,
            fullname: name,
            phone: mobile,
            email: mail,
            address1: addr,
            state: state,
            district: dis,
            subdistrict: subdis,
            pincode: pin,
            usertype: user,
            role: role,
            token: apptoken,
        },
        success: function (response) {
            visibility(false);
            console.log("Response > > " + response);
            if (response.status == "SUCCESS") {
                swal("Updated User", " Information Updated Successfully!", "success");
            }
            loadData();
        }
    });
}

КОД PHP

<?php 

// where are we posting to?
$url = 'http://api.tech.com/api/UpdateUser';

    // what post fields?
    $fields = array(
       'id' => $_POST['id'],
       'fullname' => $_POST['fullname'],
       'phone' => $_POST['phone'],
       'email' => $_POST['email'],
       'address1' => $_POST['address1'],
       'state' => $_POST['state'],
       'district' => $_POST['district'],
       'subdistrict' => $_POST['subdistrict'],
       'pincode' => $_POST['pincode'],
       'usertype' => $_POST['usertype'],
       'role' => $_POST['role'],
    );

    // build the urlencoded data
    $postvars = http_build_query($fields);

    // open connection
    $ch = curl_init();

    $token = $_POST['token'];

    // set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);

        curl_setopt($ch, CURLOPT_HTTPHEADER, array("AppToken: $token", 
"Content-Type: application/x-www-form-urlencoded"));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    // execute post
    $result = curl_exec($ch);

    echo $result;

    // close connection
    curl_close($ch);

?>

ОБНОВЛЕНИЕ:

Запрос, отправленный API ($ url), не отображается вСеть Tab.Но запрос к edituser.php показывается.

enter image description here

1 Ответ

0 голосов
/ 19 сентября 2018

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

Вот что я собрал до сих пориз вашего вопроса.

  1. Вы вызываете ajax-функцию в JavaScript, которая запускает заданный код PHP.
  2. JavaScript успешно вызывает этот код "для сетевого скриншота".
  3. На вкладке сети указано, что PHP-скрипт ничего не возвращает.

Вот мои мысли о том, как двигаться вперед.

  1. Вы, кажется,отправка всех данных с вашего клиентского JavaScript, включая безопасный пин-код и токен.Это очень плохая идея, так как это означает, что все ваши пользователи могут увидеть этот безопасный значок и украсть его для своих гнусных целей.Вместо этого сохраните константы, такие как безопасный пин-код в php-коде.

  2. Если вы ожидаете увидеть запрос скручивания на вкладке сети, вы ошибаетесь.Запрос curl идет от сервера к серверу и никогда не будет виден клиенту.

  3. Если вкладка ответа пуста, у вас может быть что-то простое, например синтаксическая ошибка или что-то вродеошибка скручивания, которую вы не фиксируете.

Добавьте это к вашему запросу на отладку:

$result = curl_exec($request);
$response_code = curl_getinfo($request, CURLINFO_HTTP_CODE);
echo 'Response code: ' . $response_code;

if(curl_error($request))
{
  echo '<br />Curl error: ' . curl_error($request);
}

Вы должны увидеть код ответа как минимум в "ответ "вкладка вызова ajax.

Если вы все еще ничего не видите, убедитесь, что ваша конфигурация PHP настроена на отображение всех предупреждений и ошибок и т. д. и не подавляет необходимую вам информацию.

...