2011-11-13 45 views
3

删除空值POST

var pageData = { 
query: null, 
pageNumber: 0, 
pageSize: 30}; 

当我做一个Ajax GET:

$.ajax({ 
    type: 'GET', 
    url: '/Ajax/GetSuggestions', 
    data: pageData, 
    success: function (response) {} 

请求秀萤火虫:http://localhost:31198/Ajax/GetSuggestions?query=null&pageNumber=1&pageSize=30

在服务器端(ASP .NET MVC3),我收到查询=空字符串,而不是空数据(我需要)。 如何解决它,而不使用javascript的删除方法来删除空值?

+1

你在服务器端(如PHP ASP.NET MVC?)使用的是什么技术? – mjwills

+0

asp .net mvc 3. – vNext

+0

为什么你不想用'delete'去除空值? – Alnitak

回答

2

有多种方式可以通过线路发送数据。将表单数据发送到服务器的标准版本是url编码。第二种方法是发送一个JSON对象。 (传输细节是JSON将被url编码,但这只是一个传输细节)。第三种方法是使用XML。

由于@ jfriend00在他的回答中显示,有多种hacky方法通过url编码发送“null”值。您应该使用服务器端堆栈最适合支持的端口。

回复:为什么字符串“null”发生了什么事是JavaScript 空需要转换为可以通过HTTP发送的值(“过线”)。默认的方法是使用字符串null。问题是url编码方案只能以字符串形式发送东西。所以它没有自动的方式来发送值null与字符串null。通常的解决方法是一个空字符串,“”。

但是这也会引起服务器端的问题,因为在大多数计算机语言中,字符串“”不等于值null。因此,您需要进行适当的比较或转换。例如,“”== 虚假在您的服务器软件?

使用JSON进行数据编码是另一种技术。

JSON直接支持空值。它应该被传送为null。请参阅JSON spec(不太明显,搜索页面为空)和IBM docs

您在JSON中接收空数据的方式是裸号null。如果您使用的是JSON,请注意,您没有收到字符串null,您会收到JSON关键字null。您的JSON接收器/解码器应该知道差异。如果没有,那就是错误的。

+0

这个答案是完全错误的 - 他不**使用JSON!参数正在进行URL编码,而不是JSON编码。 – Alnitak

+0

糟糕,我很快读了q。我现在已更新以更好地涵盖选项和潜在问题。 –

2

如果你希望你的URL看起来像这样:

http://localhost:31198/Ajax/GetSuggestions?query=&pageNumber=1&pageSize=30 

然后,你要查询的属性设置为""(空字符串)。


如果你希望你的URL看起来像这样:

http://localhost:31198/Ajax/GetSuggestions?&pageNumber=1&pageSize=30 

然后,你必须删除通过或者不把它那里摆在首位,或从pageData对象中删除query财产通过使用delete pageData.query将其删除。

0

当请求字符串在jQuery中生成时,它使用它可以找到的data对象上的每个属性。

所有你需要做的,删除一个属性是delete属性:

delete pageData.query;