在执行对API的AJAX调用时,我一直收到上述403错误。
错误发生在Microsoft Edge中,但在IE,Chrome,Firefox或Safari中不会发生。
该页面不使用bootstrap,因为我已经读过它可能是由于页面无法找到所需的.LESS文件引起的。我甚至试图包括bootstrap,看看是否解决了这个问题 - 它没有。
我似乎无法通过Google搜索来找到任何内容,除了一些Twitter Oauth的内容和上面的引导回答 - 这两者都与我的应用程序无关。
正如我之前所说,AJAX调用在任何浏览器中都可以正常工作,除了边缘。各种浏览器的代码完全相同,响应/请求标头彼此匹配 - 因此,POST请求发送的数据不正确(如果浏览器默认设置不同)。
这就是我想要实现的目标:
index.html包含4个iFrames住房广告。然后,我的Javascript代码会选择iFrame标记并覆盖竖起/竖起的图标,用户可以在该图标上为所述广告提供反馈。 AJAX调用通过广告URL(iFrame src)和用户id(consumer_id)传递。然后,在写入数据库以记录竖起/竖起操作后,它会返回一个展示ID。
示例代码:
的index.html:
<body>
<iframe src="https://ad.doubleclick.net/ddm/adi/N4406.154378.CRITEO/B9862737.133255611;sz=728x90;click=http://cat.fr.eu.criteo.com/delivery/ck.php?cppv=1&cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&maxdest=;dcopt=anid;ord=f4840e2d31;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=?" width="728" height="90" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" bordercolor="#000000"></iframe>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript" src="client.js"></script>
</body>
AJAX致电:
// This isn't usually a var, but added for clarity. Usually uses a selector
// to grab the entire iframe DOM element, and then store in array.
var iframe = "http://ad.doubleclick.net/ddm/adi/N4406.154378.CRITEO/B9862737.133255611;sz=728x90;click=http://cat.fr.eu.criteo.com/delivery/ck.php?cppv=1&cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&maxdest=;dcopt=anid;ord=f4840e2d31;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=?";
$.ajax({
method: 'POST',
url: 'http://my.api/url/',
async: false,
datatype: 'json',
data: {
ad_url: iframe, // fetch ad_url from iframe src
wittel_consumer: "57fcea30f910092a06806344"
},
success: function(data, respText, xhr) {
console.log('Data',data);
console.log('XHR',xhr);
},
error: function(error) {
console.log('URL',this.url);
console.log('Error',error);
}
});
在此代码中,AJAX会被操作,但会在“错误”下返回。方法。我可以看到网址是正确的,在error
回调中,我只得到一个包含readyState: 4, status: 403, statusText: "Forbidden"
之类的对象。如上所述,API确实有效,因为它在任何其他浏览器中成功完成,因此必须与Edge处理请求的方式有关。或者它可能是服务器配置的东西?老实说,我不知道。
完全错误:
HTTP403: FORBIDDEN - The server understood the request, but is refusing to fulfill it.
(XHR)POST - http://my.api/url/
答案 0 :(得分:5)
对于遇到此问题的其他人:
我将我的代码放在服务器上并从那里运行以测试它是否是localhost连接 - 它是什么。
我使用的API必须配置为不允许本地主机连接,这是我以前从未体验过的。
浪费2天并且失去理智的好方法!
无论如何,感谢上述建议。欣赏它。
答案 1 :(得分:1)
请在选项中包括凭据。
var url = 'https://dummy_url/_api/lists'
var options = {
headers: {"Accept": "application/json; odata=verbose"},
credentials: 'include'
}
fetch(url, options).then(
res => res.json().then(json => console.dir(json))
)
这对我有用。
答案 2 :(得分:0)
我遇到了同样的问题。
事实证明,它与数据库中的某些记录有关。在大多数记录中,操作顺利运行,但在某些情况下,我得到403,如果我坚持,我会得到500.
我自己的经验表明它与localhost无关。它工作正常。它与你的一些记录有关......在非关键字段中查找双重性但在查询中引用。
答案 3 :(得分:0)
尝试将这些设置添加到您的请求中:
"headers": {
"Content-Type": "application/json",
"cache-control": "no-cache",
},
"processData": false,
答案 4 :(得分:0)
其他人对此一无所知,以上答案均无法帮助您:
检查您的Edge版本,17不支持Promises。
支持2018年10月更新的Windows Edge(包括Edge 18和Promises)的升级,提取请求将起作用。