2014-09-12 76 views
0

我们使用以下AjaxSetup:在第500个用户关于发送一次GET请求,而不是POST

$.ajaxSetup(
{ 
    cache: false, 
    type: 'POST', 
    contentType: "application/json", 
    data: "{}", 
    headers: { "Accept": "application/json; charset=utf-8" }, 
    beforeSend: function(jqXHR, options) 
    { 
     if (options.contentType == "application/json" && typeof options.data != "string") 
      options.data = JSON.stringify(options.data); 
    }, 
    processData: false 
}); 

我返回以下我的职务要求:

$.ajax(
{ 
    url: '/url', 
    data: postData, 
    success: function(json) 
    { 
    } 
}) 

我们与ASP的工作。 NET,并且这些默认值通常很好地工作。所有内容都会自动同步到JSON,并在ASP.NET管道中正确读取和模型绑定。

只有一次在大约一千个用户似乎有问题。而不是POST请求,他们的客户端发送GET请求。

用户代理提到了在Windows 7

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36

的Chrome 37.0.2062.120难道是什么原因,该客户端发送GET请求?

  • 这可能是由adblocker造成的吗?
  • 或防火墙设置?
  • 我可以跟踪哪些其他设置进一步调查?
+0

也许你的用户之一是一个巨魔:)你有没有试过tracert + wireshark? – theMarceloR 2014-09-12 13:38:55

+0

获取相同规格的浏览器,到达通过'get'而不是'post'发送的位置,重复相同的几次。如果重复,则可能是浏览器中的错误。你可以使用接受GET和POST方法吗?请求? – Justinas 2014-09-12 13:39:21

+2

你确定它不只是手动进入'/ url'吗?这会调用get。 – briansol 2014-09-12 13:46:29

回答

0

什么是预期回报Booleantypeof options.data != "string"?出现这种情况会返回false? ;可能是发送一个空的对象服务器 - 即使在$.ajax()合适的对象包括

IEG,

尝试

var postData = {"def":789}; 
$.ajaxSetup(
{ 
    cache: false, 
    type: 'POST', 
    contentType: "application/json", 
    data: "{}", 
    headers: { "Accept": "application/json; charset=utf-8" }, 
    beforeSend: function(jqXHR, options) 
    { 
     if (options.contentType == "application/json" && typeof options.data != "string") 
      options.data = JSON.stringify(options.data); 
      console.log(typeof options.data 
      , typeof options.data != "string" 
      , typeof options.data !== "string") // `string` , `false`, `false` 
    }, 
    processData: false 
}); 
$.ajax("", postData); 

如果某种方式processData选项改为true,请求将成为一个GET请求,并可能返回error

尝试没有$.ajaxSetup()data包裹在引号中,或者投射为string

由于beforeSend将评估

data: "{}"

string并返回false

请参阅network标签console;其中postData(object,Request Payload)被渲染为{}:没有数据;没有数据发送到服务器。

http://api.jQuery.com/jquery.ajax

过程数据(默认值:true)类型:Boolean默认情况下,在 传递到数据选项作为对象(从技术上讲,任何超过 串等)将被处理的数据和转化转换为查询字符串,将 修改为默认的内容类型“application/x-www-form-urlencoded”。如果 要发送DOMDocument或其他未处理的数据,请将此 选项设置为false。