(最新的说只是添加硬编码的引号,即,['']但是我做不到,我正在调用一个返回数组的函数)
['']
所以这是我的代码(请注意,问题出在空数组 new Array() ):
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版本来自最新的Google 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但没有成功。
[]
traditional: true
问题是您不能真正发送空数组。您是否尝试过手动发送一个空数组?该uri的外观如何(请注意,这与POST的原因相同)?
/path?arr[]
这将导致像这样的$ _GET:
array ( 'arr' => array ( 0 => '' ) )
那不是一个空数组,不是吗?它是一个包含空字符串的单个元素的数组。所以jQuery的作用是完全不发送任何东西,我同意这是处理它的正确方法。
实际上,这对于您在服务器上进行检查非常简单。只需额外检查该参数是否存在,即:
$tabs = array(); if(isset($_POST['tab'])) { $tabs = $_POST['tab']; }