【问题标题】:Two cURL requests showing the same data when loaded via AJAX通过 AJAX 加载时显示相同数据的两个 cURL 请求
【发布时间】:2018-02-26 18:58:03
【问题描述】:

我在同一个 php 页面中发出两个单独的 cURL 请求。当我自己加载页面时,它按预期工作,每个请求都返回不同的正确数据。

但是,当我通过 AJAX 加载页面时,第二个请求显示的数据与第一个请求相同。为什么会这样?代码如下:

    $auth = base64_encode( 'user:'.$api_key );
    $data = array(
        'apikey'        => $api_key,
    );
    $json_data = json_encode($data);
    $ch = curl_init();
    $ch2 = curl_init();

    $curlopt_url = "https://us7.api.mailchimp.com/3.0/reports/".$_GET['id'];
    curl_setopt($ch, CURLOPT_URL, $curlopt_url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Authorization: Basic '.$auth));
    curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/3.0');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    $result = curl_exec($ch);
    $results = json_decode($result, true); ?>

    $curlopt_url_b = "https://us7.api.mailchimp.com/3.0/reports/".$_GET['id'].'/sent-to/?count=5000 ';

    curl_setopt($ch2, CURLOPT_URL, $curlopt_url_b);
    curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($ch2, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Authorization: Basic '.$auth));
    curl_setopt($ch2, CURLOPT_USERAGENT, 'PHP-MCAPI/3.0');
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch2, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch2, CURLOPT_POST, true);
    curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch2, CURLOPT_POSTFIELDS, $json_data);
    $recipient_result = curl_exec($ch2);
    $recipients = json_decode($recipient_result, true); 

当通过 AJAX 加载时,$recipients == $results,此时它们应该从完全不同的端点返回结果。什么给了?

【问题讨论】:

  • 你需要加入结果和json_encode()一次。你用 $results$recipients 做什么
  • @LawrenceCherone 但是为什么它在单独加载而不是通过 AJAX 加载时可以工作?
  • 如果你仔细看{}{},你不太可能得到2个json对象,jquery只会解析一个。
  • 也可能是如果您的查询说/endpoint.php jquery 正在缓存请求,您可以在您的ajax 调用中尝试cache: false,
  • @LawrenceCherone 这是一个 ajax 调用,每个 cURL 请求都有不同的变量,所以也不可能。

标签: php jquery ajax curl mailchimp


【解决方案1】:

问题在于 AJAX 请求,而不是 cURL 请求。 AJAX 请求在 URL 中添加了一个附加参数(在本例中为 'ajax=true'),该参数传递到 $_GET 变量中,因此请求了错误的端点。独立加载时正确加载,因为 URL 没有被 JS 更改。

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2013-02-01
    • 2014-06-07
    • 2018-06-21
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多