我有
var pageData = {
query: null,
pageNumber: 0,
pageSize: 30};
当我制作ajax时:
$.ajax({
type: 'GET',
url: '/Ajax/GetSuggestions',
data: pageData,
success: function (response) {}
请求显示在firebug中:http://localhost:31198/Ajax/GetSuggestions?query=null&pageNumber=1&pageSize=30
在服务器端(ASP .NET MVC3),我在字符串中收到query = null,而不是空数据(我需要的)。 如何在不使用javascript的删除方法来删除空值的情况下修复它?
答案 0 :(得分:2)
有多种方法可以“通过网络”发送数据。用于将表单数据发送到服务器的标准是url编码。第二种方法是发送JSON对象。 (传输细节是JSON将被url编码。但这只是一个传输细节。)第三种方法是使用XML。
正如@jfriend00在他的回答中所示,有多种黑客方式通过url编码发送“null”值。您应该使用服务器端堆栈最好支持的那个。
Re:为什么字符串“null”发生的事情是Javascript 值 null需要转换为可以通过HTTP发送的值(“线”)。默认的方法是使用字符串 null 。问题是url编码方案只将字符串作为字符串发送。所以它没有自动发送值null vs teh string null的方法。通常的工作是一个空字符串,“”。
但是这也会引起服务器端的问题,因为在大多数计算机语言中字符串“”不等于值 null 。因此,您需要进行适当的比较或转换。例如服务器软件中的“”== false ?
使用JSON进行数据编码是另一种技术。
JSON直接支持null值。应该将其作为null
传输。请参阅JSON spec(不那么明显,搜索页面为null)和IBM docs
您在JSON中接收空数据的方式是单词null
。如果您正在使用JSON,请注意您没有收到字符串null,您会收到JSON关键字null。您的JSON接收器/解码器应该知道差异。如果没有,那就错了。
答案 1 :(得分:2)
如果您希望您的网址如下所示:
http://localhost:31198/Ajax/GetSuggestions?query=&pageNumber=1&pageSize=30
然后,您必须将查询属性设置为""
(空字符串)。
如果您希望您的网址如下所示:
http://localhost:31198/Ajax/GetSuggestions?&pageNumber=1&pageSize=30
然后,您必须删除以从pageData对象中移除query
属性,方法是先将其放在那里,或者使用delete pageData.query
删除它。
答案 2 :(得分:0)
当在jQuery中构建请求字符串时,它正在使用它可以找到的data
对象上的每个属性。
删除属性所需要做的只是delete
属性:
delete pageData.query;