2012-07-11 101 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