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

时间:2012-07-11 14:37:20

标签: asp.net ajax web-services jquery

我使用简单的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请求是什么? 为什么会这样?

P.S。我提到如果我删除contentType:“application / json; charset = utf-8”(并添加dataType:json或jsonp),则不会生成OPTIONS请求,但我没有得到格式正确的json作为响应(我得到了一个xml文件)

顺便说一句:服务是asp.net c#:

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

请让我知道您是否需要有关请求或响应的更多详细信息

先谢谢!!!

2 个答案:

答案 0 :(得分:2)

OPTIONS请求是因为Cross origin resource sharing。它基本上是Web浏览器,询问目标服务器是否允许跨域资源共享。

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

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

对此有很多疑问,详情请回答here

答案 1 :(得分:-1)

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