【发布时间】:2018-04-05 04:34:08
【问题描述】:
我想在 ajax 获取请求中使用 oauth api 令牌详细信息,但我收到 401 未经授权的错误。我已经在 php 文件中检查了我的凭据,但我无法使用它运行 ajax 请求。
我被困在如何在 Bigcommerce oauth 登录的 ajax 请求中传递标头。 API 网址:https://api.bigcommerce.com/stores/{store-hash}/v3/catalog/categories
我的工作 PHP 代码:
$headers = array(
"Accept: application/json",
"X-Auth-Client:".$client_id,
"X-Auth-Token:".$auth_token
);
$chbig = curl_init($api_url);
curl_setopt($chbig, CURLOPT_TIMEOUT, 60);
curl_setopt($chbig, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $chbig, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $chbig, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt( $chbig, CURLOPT_RETURNTRANSFER, 1 );
$result = curl_exec($chbig); //execute post
$http_status = (string) curl_getinfo($chbig, CURLINFO_HTTP_CODE);
curl_close($chbig);
echo "<pre>";
print_r($http_status);
print_r($result);
不工作的 Js 代码:
$.ajax({
url: api_url,
headers: {
"X-Auth-Client" : client_id,
"X-Auth-Token" : auth_token ,
'Accept':'application/json',
},
dataType: 'jsonp',
type: "GET",
success: function() { alert('Success!'); }
});
请帮我找到解决办法...
【问题讨论】:
-
ajax 生成的请求看起来是否与 cURL 生成的请求相同(完全相同的标头、内容等?)。您可以使用 Fiddler 之类的工具来比较它们。
-
没有。我没有收到我在 ajax 请求中传递的任何请求标头
-
"Accept application/json" 和 "dataType: jsonp" 相互矛盾和冲突。我认为您应该删除 jsonp 位。您的 cURL 请求中没有任何内容可以模仿这一点,如果您期待 JSON,那么您就不会期待 JSONP 回调。不是一回事。
-
是的,但我用它来克服错误“请求的资源上不存在'Access-Control-Allow-Origin'标头”。当我删除 Accept : application/json 时,同样的错误来了,没有变化。
-
“请求的资源上不存在 'Access-Control-Allow-Origin' 标头”告诉您不允许通过 ajax 访问该 URL。如果它是您的服务器,您可以通过将适当的 CORS 标头添加到服务器的响应来修复它。如果它不是您的服务器,那么这是设计使然,除了返回通过 PHP 发出请求外,您无能为力。告诉 jQuery 将数据类型设置为 JSONP 可能会使访问控制错误消失,但这对您没有帮助,因为这意味着请求不再有意义,因为它不是您调用的 JSONP 端点。
标签: ajax api oauth bigcommerce request-headers