2012-07-11 48 views
2

我用一個簡單的方法jQuery.ajax:爲什麼向服務器發送OPTIONS請求?

$.ajax({ 
     type: "GET", 
     url: serviceUrl + '/GetAgentsGroupNameById', 
     contentType: "application/json; charset=utf-8", 
     data: { id: agentsGroupId }, 
     async: false, 
     success: function (data) { 
      agentsGroupName = data["d"]; 
     }, 
     error: function (request, message) { 
      agentsGroupName = ''; 
     } 
    }); 

「獲取」請求被髮送,我從服務器獲取一個結構良好的JSON響應。 的問題是,我在另一個請求生成相同的URL開發工具看,有請求方法:OPTIONS,用空的反應,我看到了一個錯誤:

OPTIONS http://localhost:1004/MobileService.asmx/GetSubscribedAgentsByUserId?userId=27 500 (Internal Server Error) 

這是什麼OPTIONS請求? 爲什麼會發生?

P.S.我提到,如果我刪除contentType:「application/json; charset = utf-8」(並添加dataType:json或jsonp),則不會生成OPTIONS請求,但我沒有得到格式正確的json作爲響應我得到還挺XML文檔)

BTW:服務是asp.net C#:

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public string GetAgentsGroupNameById(int id) 

請讓我知道如果您需要任何進一步細節關於請求或響應

謝謝從前進!

回答

2

OPTIONS請求是因爲Cross origin resource sharing。基本上,Web瀏覽器詢問目標服務器是否允許跨域資源共享。

簡而言之,您無法將json請求發送到與提供頁面的域不同的域。

如果你只是在做GET請求,你可能想看看JSONP這可以解決這個問題。但是,它只適用於GET請求。

已經有很多關於這個問題,有一個細節回答here

+0

是的你是對的 – 2012-07-11 14:47:03

+0

不知道該鏈接應該採取的人雖然?! – 2012-07-11 14:50:01

+0

我只做「GET」請求,就像你看到的那樣,當我使用dataType:'jsonp'時,我沒有任何錯誤,但是我得到一個xml文檔作爲響應,而不是一個json對象。 – benams 2012-07-11 14:52:26

-1

嘗試切換您的$就「類型」使用POST動詞,而不是GET。

+0

我不相信這會有所作爲。 – 2012-07-11 14:43:06