在PHP中使用jQuery代替cURL进行REST API调用

3
我一直在使用 PHP 中的 cURL 成功地进行 API 调用,并在本地机器上返回一个 JSON 数组。但是当我将此代码推送到我的主机(bluehost)时,我却得不到任何返回值,没有任何错误信息,只是 null。
有人建议说,使用 cURL 是老派的方法,也不被推荐,我应该使用 jQuery 来完成这个任务。我已经在下面放置了我的当前代码,请问有谁能指点我如何在 jQuery 中或者通过 PHP 的其他方法来实现同样的功能?
function CallAPI($method, $url, $data = false)
{
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Optional Authentication:
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    return curl_exec($curl);
}

我在PHP中通过以下方式调用此函数来进行GET请求:

$api_querystring = "https://discreet.afty.io/api/swags?type=0&status={$swag_status}";
$response = CallAPI('GET', $api_querystring);
$badges = json_decode($response);

我收到的是一个JSON数组对象,类似于:

Array ( [0] => stdClass Object ( [__v] => 21 [_id] => 51ae35bd005f377a06000018 [apns_token] => 8ef99cb6c8fa2928468cfbaa5b1d6d0244e46ad0ca6dd56e476e26edffbb8c59 [badge] => 51b64157a1facb5b2b000018 [device_id] => EB3D1DFF-5557-4EEA-8BE3-E261FBB5C058 [first_name] => Jeff [last_name] => S [metadata] => stdClass Object ( [limit] => Erotic Chat ) [groups] => Array ( [0] => 51ae99e3005f377a06000036 [1] => 51a84dc3a8a3801477000007 [2] => 51ae70085068176b06000023 [3] => 51af69ad5068176b0600002f [4] => 51b2a0af50c8b0507d00000c [5] => 51a84df6a8a3801477000008 [6] => 51ae5c625068176b06000021 [7] => 51a84e91a8a380147700000a [8] => 51b69543a1facb5b2b000020 [9] => 51b695cddaa06e871900001b [10] => 51b695f1daa06e871900001c [11] => 51a84e81a8a3801477000009 ) [connected] => [admin] => [flagged] => [blocked] => [apns_count] => 0 [apns_status] => 0 [_create_date] => 2013-06-04T18:45:17.460Z [_last_modified] => 2013-06-16T06:17:07.516Z ) )

对于像这样的POST请求:

$api_querystring = "https://discreet.afty.io/api/admin/users/{$id}";
$response = CallAPI('POST', $api_querystring, $data);

我知道这可能是相当基础的东西;但这是我第一次使用API(很酷),但我需要一些额外的指导。


2
jQuery是一个JavaScript库。如果您想使用jQuery进行API调用,则将在客户端(浏览器中)使用JavaScript执行请求。这可能会改变您的Web应用程序的结构。 - compid
或者你可以尝试这个:https://dev59.com/_mkw5IYBdhLWcg3wkLX2#9802864 这是在PHP中进行GET请求的另一种方式。 - compid
只有我觉得,还是有其他人感觉 cURL 不是老派的吗? - gkalpak
1个回答

0
首先,jQuery是一个JavaScript库。JavaScript在客户端浏览器中执行,而不是在服务器上执行。这意味着使用JavaScript可能会暴露更多的应用程序逻辑,但同时也可以通过JavaScript直接访问DOM并修改网页,而无需额外的服务器请求,从而增强用户体验/响应能力。
要在JavaScript中发出请求,我们通过AJAX来实现,这是一种异步向服务器发出请求的方式。为了充分利用这一点,您需要学习JavaScript、jQuery,以及如何在jQuery中执行AJAX请求以及如何使用jQuery操作DOM(网页)。
在最简化和隔离的形式下,以下是使用jQuery库的JavaScript代码,可以发出请求:
$.ajax({
  url: "https://discreet.afty.io/api/swags",
  type: "get",
  data: {
    type: 0,
    status: somevar
  },
  success: function(data) {
    // do something with returned JSON
  }
});

我会将这个保留为社区维基,以便其他用户可以添加关于开始使用Javascript/jQuery/AJAX的资源。


谢谢,我以前做过一些与MySQL CRUD相关的AJAX请求,格式看起来非常相似。我会尝试操作一下。谢谢。 - Jeff Solomon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接