在$ .ajax POST中删除javascript中的空值

时间:2011-11-13 05:56:40

标签: javascript jquery

我有

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的删除方法来删除空值的情况下修复它?

3 个答案:

答案 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;