使用PHP发送POST请求并获取JSON响应吗?

时间:2018-09-19 18:30:11

标签: php ajax curl post php-curl

我正在尝试发送POST request via PHP from AJAX。我用Postman检查了API。一切正常。但是它并没有在PHP中执行。它也没有显示在“网络”选项卡中。

我看到了很多在Stack Overflow中发出POST请求的示例并进行了尝试。但是我不知道我要去哪里错了?

我在此处同时附有JS代码和PHP代码

JavaScript代码

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)的请求未显示在“网络”选项卡中。但是显示了对edituser.php的请求。

enter image description here

1 个答案:

答案 0 :(得分:0)

我觉得这里缺少很多上下文,但是我做了很多类似的事情,所以我会尽力帮助我理解。

到目前为止,这是我从你的问题中收集的信息。

  1. 您正在用JavaScript调用ajax函数来触发给定的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 configuration设置为显示所有警告和错误等,并且不隐瞒您所需的信息。