jQuery,AJAX,JSONP:即使它是空的,如何实际发送一个数组?

我已经阅读过这些问题,但没有一个能满足我的需求:

  • 使用jQuery在JSON中测试空数组对象
  • jQuery 1.4.4+ AJAX请求 – 发布空数组或对象变为字符串
  • 无法从jQuery Ajax请求访问数据,返回空数组
  • JQuery在发送时删除空数组

(最新的一个说只是添加硬编码的引号,即['']但我不能这样做,我正在调用一个返回数组的函数)

所以这是我的代码(注意问题在于空数组new Array() ):

 function AjaxSend() { $.ajax({ url: '/json/myurl/', type: 'POST', dataType: 'jsonp', data : { 'tab':new Array() }, context: this, success: function (data) { if (data.success) { console.log('ok'); } else { console.log('error'); } } }); } 

简单呃? 这是我的Php代码:

 echo '_POST='.var_export($_POST,true)."\n"; 

这是结果:

 _POST=array ( ) jQuery1710713708313414827_1329923973282(...) 

如果我将空数组更改为非空,即:

 'tab':new Array({ 't':'u' },{ 'v':'w' }) 

结果是:

 _POST=array ( 'tab' => array ( 0 => array ( 't' => 'u', ), 1 => array ( 'v' => 'w', ), ), ) jQuery1710640656704781577_1329923761425(...) 

所以这显然意味着当要发送一个空的Array()时,它会被忽略,并且它不会被添加到POST变量中

我错过了什么吗?

PS:我的jQuery版本来自最新的谷歌CDN,即:

http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js

我希望发送数组,即使它是空的(= send [] )! 有解决方案吗 任何的想法? 我已经尝试将此选项添加为traditional: true但没有成功。

问题是你无法真正发送空数组。 您是否尝试手动发送空数组? 那个uri看起来怎么样(注意这与POST的推理相同)?

 /path?arr[] 

这会导致$ _GET像这样:

 array ( 'arr' => array ( 0 => '' ) ) 

这不是一个空arrays,是吗? 它是一个包含空字符串的单个元素的数组。 那么jQuery做了什么,我会同意这是处理它的正确方法,就是不发送任何东西。

这实际上非常简单,您可以检查服务器。 只需添加一个额外的检查参数是否存在,即:

 $tabs = array(); if(isset($_POST['tab'])) { $tabs = $_POST['tab']; } 

尝试

PHP

  

JS

  $.post("echo.php", {"emptyArray":[]} , function (data, textStatus, jqxhr) { if (textStatus === "success" && data.length === 0) { // do stuff console.log(data.length === 0 ? new Error("error").message : data); }; }); 

jsfiddle http://jsfiddle.net/guest271314/Lf6GG/