使用jQuery AJAX向Web服务进行查询。我的查询如下:
var serviceEndpoint = 'http://example.com/object/details?version=1.1';
$.ajax({
type: 'GET',
url: serviceEndpoint,
dataType: 'jsonp',
contentType: 'jsonp',
headers: { 'api-key':'myKey' },
success: onSuccess,
error: onFailure
});
当我执行这个时,我得到了一个状态错误403。我不明白为什么我的调用会导致状态码为403的结果。我控制着我的服务安全,它被标记为完全开放。我知道密钥是有效的,因为我在另一个调用中使用它,那个调用是成功的。这是可以运行的调用:var endpoint = 'http://example.com/object/data/item?version=1.1';
$.ajax({
type: 'POST',
url: endpoint,
cache: 'false',
contentType:'application/json',
headers: {
'api-key':'myKey',
'Content-Type':'application/json'
},
data: JSON.stringify({
id: 5,
count:true
}),
success: onDataSuccess,
error: onDataFailure
});
我知道这是两个不同的端点。但我百分之百地相信这不是服务器端身份验证或权限错误。再次强调,服务器端一切都是公开的。这意味着我在客户端请求上犯了一些错误。
我感觉我应该说明这个请求是在开发期间进行的。所以,我是从http://localhost:3000运行这个请求的。因此,我立即认为这是一个CORS问题。但是一切看起来都是正确的。我的POST请求可以工作,但我的GET却不行,这让我非常沮丧。我有什么遗漏吗?可能是什么原因导致的?
jsonp
请求发送头信息,因为它是一个脚本请求。您确定要使用jsonp
而不是json
吗?另外,为什么要对头信息使用JSON.stringify()
?由于没有发送任何正文内容,GET 请求没有请求contentType
。您有许多问题,其中任何一个都可能是问题的原因。 - charlietfl