为什么OPTIONS请求被发送到服务器?

我使用一个简单的jQuery.ajax方法:

$.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 = ''; } }); 

发送’Get’请求,我从服务器得到格式良好的json响应。 问题是我在开发人员工具中看到另一个请求生成到同一个URL,请求方法:OPTIONS,响应为空,我看到一个错误:

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

这个OPTIONS请求是什么? 为什么会这样?

PS我提到如果我删除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) 

如果您需要有关请求或响应的任何详细信息,请告诉我

谢谢你!

OPTIONS请求是由于跨源资源共享 。 它基本上是Web浏览器,询问目标服务器是否允许跨域资源共享。

简而言之,您不能将json请求发送到与提供页面的域不同的域。

如果您只是在进行GET请求,您可能需要查看解决此问题的JSONP 。 但是,它仅适用于GET请求。

对此有很多疑问,这里有一个详细的答案

尝试切换$ .ajax’Type’以使用POST动词而不是GET。