【发布时间】: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.phpjquery 正在缓存请求,您可以在您的ajax 调用中尝试cache: false,。 -
@LawrenceCherone 这是一个 ajax 调用,每个 cURL 请求都有不同的变量,所以也不可能。
标签: php jquery ajax curl mailchimp