2016-10-14 124 views
2

對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&amp;cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&amp;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&amp;cpp=ZNbxVXxoRmlURGJwS3JrRUZxTXVnNG83QmlTRUhSNDgzZEFXeEt6Q2VkcXpuTlFXTzBPUytNL0t3QW1NR2hiWXMyU1Jjb0NsTDZZQk8ybzRnajZnZlNodTJKNjhiSW8yaFlPTVBDRUlZQjJ5QVNUQjQrNHd5UEJicEI5OS95NUUxMWVDbGRZamZ4RjZYS1FHam5LQ1dpcENzanhtcEhlckpmOEVuSUhRTllIQnBPazlnMnQ3eWVJcjhOSzRYOXYwOXlqYVFrTnI0eDZJSTBjR1lGM2VUVVloQjd3RlJUcndIQUl3NUpRalY0YXV3Q29SRktKSkFJSktueU0vMVdydko4UzZGSldkbUR1RUR4MTU2a0loamFYZlpiZz09fA%3D%3D&amp;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/

+0

在調試諸如此類的東西時很費力......但也許嘗試向您的ajax調用添加標頭? 'header:{'Content-Type':'application/json; charset = utf-8'}' –

+0

是檢查標題。如果帖子和標題是相同的,那麼服務器將沒有理由在禁止的情況下回答一次,而其他時間的結果正確。如果您的請求確實在其他瀏覽器中運行,則您的請求不可能完全相同 - 而不僅僅是無聲地失敗。 – user5542121

+0

你能發佈完整的ajax請求,包括頭文件嗎?否則,您還可以嘗試比較由其他瀏覽器和Edge發送到服務器的標頭。 –

回答

3

其他任何人有這個問題:

我把我的代碼在服務器上,並跑去從那裏來測試它是否是本地主機連接 - 它是。

我使用的API必須配置爲不允許本地主機連接,這是我以前從未經歷過的。

偉大的方式浪費2天,但失去你的理智,但!

無論如何感謝上述建議。欣賞它。

0

我剛剛有同樣的問題。

事實證明,它與數據庫中的某些記錄有關。這些操作在大部分記錄中都能夠順利運行,但在某些情況下,我得到了403,而且如果我堅持,我會得到500。

我自己的經驗說它與localhost無關。它工作正常。它與你的一些記錄有關......在非關鍵字段上尋找重複,但在你的查詢中引用。

+0

很好的答案!你可能會把你的代碼作爲代碼塊嗎?要做到這一點,編輯你的答案,選擇你的代碼,然後按ctrl/cmd + k或用4個空格縮進。另外,我注意到''的HTML代碼中有一個小錯誤,您可能想要解決這個問題。 :) – jbehrens94

+1

哈哈哈.....真棒....我有快速的手指....癱瘓大部分我輸入的......問題就在這裏;不在原產地 –

相關問題