在对 API 执行 AJAX 调用时,我不断收到上述 403 错误。
该错误出现在 Microsoft Edge 中,但不会出现在 IE、Chrome、Firefox 或 Safari 中。
该页面不使用引导程序,正如我所读,这可能是由于该页面无法找到所需的 .LESS 文件造成的。我什至尝试包括引导程序以查看是否解决了问题 - 它没有。
我似乎无法通过谷歌搜索找到任何东西,除了一些 twitter Oauth 的东西和上面的引导答案 - 这两者都与我的应用程序无关。
正如我之前所说,AJAX 调用在除 Edge 之外的任何浏览器中都可以正常工作。代码在各种浏览器中完全相同,并且响应/请求标头彼此匹配 - 因此 POST 请求发送不正确数据的情况并非如此(如果浏览器默认值不同或其他原因)。
这就是我想要实现的目标:
index.html 包含 4 个 iFrame 房屋广告。然后我的 Javascript 代码选择 iFrame 标签并覆盖一个竖起大拇指/竖起大拇指的图标,用户可以在其中为所述广告提供反馈。 AJAX 调用传递了广告 URL (iFrame src) 和用户 ID (consumer_id)。然后,它会在写入数据库以记录竖起大拇指/竖起大拇指的动作后返回印象 ID。
示例代码:
索引.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 被执行,但在“错误”方法下返回。我可以看到 URL 是正确的,并且在 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/
原文由 Scott Thornton 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于遇到此问题的其他人:
我将我的代码放在服务器上并从那里运行到它以测试它是否是本地主机连接 - 它是。
我使用的 API 必须配置为不允许本地主机连接,这是我以前从未体验过的。
浪费 2 天并失去理智的好方法!
无论如何,感谢您的上述建议。欣赏它。