對API執行AJAX調用時,我總是收到上述403錯誤。HTTP403:FORBIDDEN - 服務器理解請求,但拒絕履行請求
在Microsoft Edge中發生錯誤,但在IE,Chrome,Firefox或Safari中不會發生此錯誤。
該頁面不使用引導程序,因爲我已經讀過它可能是由於頁面無法找到需要的.LESS文件引起的。我甚至試圖包括bootstrap,看看是否解決了這個問題 - 它沒有。
我似乎無法找到任何搜索結果,除了一些Twitter Oauth的東西和上面的引導回答 - 這兩個都與我的應用程序無關。
正如我前面所述,AJAX調用在任何瀏覽器中都能正常工作,除了Edge。代碼在各種瀏覽器中完全相同,並且響應/請求標頭彼此匹配 - 所以不是POST請求發送不正確的數據(在不同的瀏覽器默認情況下)。
這就是我想要實現:
的index.html包含4個iFrame的房屋廣告。我的Javascript代碼然後挑選iFrame標籤,並覆蓋一個大拇指向上/向下圖標,用戶可以在該圖標上爲所述廣告提供反饋。 AJAX調用傳遞了廣告URL(iFrame src)和用戶標識(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被付諸行動,但返回 '錯誤' 方法下。我可以看到該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/
在調試諸如此類的東西時很費力......但也許嘗試向您的ajax調用添加標頭? 'header:{'Content-Type':'application/json; charset = utf-8'}' –
是檢查標題。如果帖子和標題是相同的,那麼服務器將沒有理由在禁止的情況下回答一次,而其他時間的結果正確。如果您的請求確實在其他瀏覽器中運行,則您的請求不可能完全相同 - 而不僅僅是無聲地失敗。 – user5542121
你能發佈完整的ajax請求,包括頭文件嗎?否則,您還可以嘗試比較由其他瀏覽器和Edge發送到服務器的標頭。 –