2014-02-28 50 views
1

我正在使用以下代碼在端口9084(缺少DEV服務器)上調用其他用戶機器上的應用程序。這是一個JAVA應用程序,我想從我的ASP.Net應用程序調用它(它使用母版頁)。我想調用下面的URL,它將在Cookie中返回403錯誤狀態和會話ID。我想使用此會話ID並使用應用程序ID和密碼撥打另一個電話。無法檢測到jQuery AJAX調用中的403狀態代碼

當我使用的URL的 「http:fwdslash fwdslash機器名:9084 fwdslash PropertyInsuranceDB fwdslash propertyAssociation fwdslash AJAX fwdslash getPolicyAddress fwdslash H0271812 fwdslash 08」 在瀏覽器中,我得到的HTTP 403禁止錯誤頁面。當我嘗試下面的代碼時,我在Fiddler中看到了相同的內容,但我無法將它陷在下面的ajax調用的錯誤部分中。

我會做什麼錯?任何建議將不勝感激。

$.ajax({ url: "http://machinename:9084/PropertyInsuranceDB/propertyAssociation/ajax/getPolicyAddress/H0271812/08", 
      context : document.body, 
      type: "get", 
      success: function (data, status) { 
       alert(status); 
      }, 
      error: function (xhr, desc, err) { 
       alert(xhr.status); 
       alert(desc); 
       alert(err); 
      } 
     }); 

感謝

--Nivedita

+0

你可以分享你在上面運行你的代碼時得到的東西嗎? –

+0

@Matt Pileggi,什麼都沒發生。我期待錯誤函數被執行。然後我在預感上將異步設置爲假,並開始工作。 – nap

回答

4

如果服務器返回的東西,它通常被認爲是成功的Ajax調用,即使它不返回你想讓它返回的內容。

趕狀態代碼,你可以做

$.ajax({ 
    url: "YOURURLHERE", 
    context: document.body, 
    type: "get", 
    statusCode: { 
     403: function (xhr) { 
      console.log('403 response'); 
     } 
    }, 
    success: function (data, status) { 
     alert(status); 
    }, 
    error: function (xhr, desc, err) { 
     alert(xhr.status); 
     alert(desc); 
     alert(err); 
    } 
}); 
+0

我按照您的建議添加了statusCode,並且在預感上將async設置爲false,現在我可以捕獲403狀態碼/錯誤。謝謝 ! – nap

+0

@nap - 不客氣,隨時接受答案,如果它幫助你。 – adeneo

1

如果你想在全球範圍內做到這一點,給人的jQuery和它(docs here)API。有人建議使用ajaxSetup更改默認配置,但jquery discourages it。所以首選方法就像這樣:

$(document).ajaxComplete(function(event, xhr, settings) { 

     if(xhr.status == 403){//unauthorized calls 
      // do whatever want with the event ie: 
      //event.stopImmediatePropagation(); 
      //show a global UI for ajax login again 
      console.error('403 response'); 
     } 

});