一尘不染

jQuery,AJAX,JSONP:即使数组为空,如何实际发送数组?

json

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

所以这是我的代码(请注意,问题出在空数组 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但没有成功。


阅读 319

收藏
2020-07-27

共1个答案

一尘不染

问题是您不能真正发送空数组。您是否尝试过手动发送一个空数组?该uri的外观如何(请注意,这与POST的原因相同)?

/path?arr[]

这将导致像这样的$ _GET:

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

那不是一个空数组,不是吗?它是一个包含空字符串的单个元素的数组。所以jQuery的作用是完全不发送任何东西,我同意这是处理它的正确方法。

实际上,这对于您在服务器上进行检查非常简单。只需额外检查该参数是否存在,即:

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