在jQuery中将processData设置为false会破坏我的AJAX请求

我已经google了一段时间,只能找到processData: false 。 我找不到任何经历过同样问题的人。

我正在将JSON传递回服务器,并且不希望jQuery自动将数据转换为查询字符串,因此我将pr​​ocessData设置为false。 如果我取出processData,我可以看到请求被触发,但是一旦我把它放进去,我就看不到任何请求(使用Firebug和Chrome开发工具)。

 $.ajax({ url: myUrl, type: "POST", data: {foo: "bar"}, processData: false, contentType: 'application/json' }); 

我最初提出的请求比这更复杂但是我已经简化了它以尝试缩小问题范围,但是这段简单的代码也不起作用(再次,如果我注释掉processData,它确实有效)。 此外,我没有在控制台中看到任何JavaScript错误。

编辑

对于未来的网络搜索者:正如lonesomeday所指出的,如果你提供JS对象或格式不正确的JSON字符串,jQuery不会抛出任何错误。 它根本不会触发请求。

您希望将数据作为JSON传递。 您正在传递Javascript对象。 JSON是一种将Javascript对象序列化为字符串的方法,以便它们可以在没有兼容性问题的情况下传递。

您实际上想要在字符串中传递JSON:

 $.ajax({ url: myUrl, type: "POST", data: '{"foo": "bar"}', processData: false, contentType: 'application/json' }); 

实际上, processData默认假定传递的data是一个对象,并将其作为application/x-www-form-urlencoded

通过@lonesomeday和@vsm总结上述所有内容,发送原始JSON( 与表单数据不同 ),您需要:

 $.ajax({ url: 'http://here-i.am/send-me/an/angel', // Determining far end data: JSON.stringify({foo: "bar"}), // Obtaining proper JSON string from data object processData: false, // Preventing default data parse behavior contentType: "application/json" // Setting proper `ContentType` for our data ... });