Php JQuery返回字符串而不是数组,尽管代码的逻辑很明显……为什么?

Php JQuery返回字符串而不是数组,尽管代码的逻辑很明显……为什么?,php,jquery,arrays,post,Php,Jquery,Arrays,Post,我正在修改另一个开发人员编写的代码。在这里,他收集值并将它们从数组(dataId)转换为逗号分隔的字符串: $("#retrieve_works_form").on('submit', function(e) { e.preventDefault(); $('#toggle_search_terms').trigger('click'); var dataId = new Array(); $('li.nw').each(function() {

我正在修改另一个开发人员编写的代码。在这里,他收集值并将它们从数组(
dataId
)转换为逗号分隔的字符串:

$("#retrieve_works_form").on('submit', function(e) {
    e.preventDefault();
    $('#toggle_search_terms').trigger('click');
    var dataId = new Array();
    $('li.nw').each(function() {
        var thisDataId = $(this).attr('data-id');
        dataId.push(thisDataId);
    });
    $('li.added_gallery_item').each(function() {
        var thisDataId = $(this).attr('data-id');
        dataId.push(thisDataId);
    });
    $('#returned_gallery_work_ids').val(dataId.join(','));
因此,
$\u POST['returned\u gallery\u work\u id']
dataId
数组中保存一个逗号分隔的值字符串。我想修改它,使它只返回数组,每个元素都在一个顺序索引中。我认为这样做可以达到目的:

$('#returned_gallery_work_ids').val(dataId);
……但事实并非如此;它返回一个逗号分隔的值字符串,与
dataId时返回的值相同。join(',')
.val()
运算符的参数

这里有两个问题:

  • 为什么结果在每种情况下都是逗号分隔的字符串
  • 如何使其返回
    dataId
    数组
    [第二个问题是真正必要的问题,但我想了解这里发生的事情的机制。]

    在输入中存储任何类型的值时,它都存储为字符串,因此如果以后检索它,您需要拆分它:

    var galleryArray = $("#returned_gallery_work_ids").val().split(',');
    
    或者在服务器端的PHP中,您将使用:

    $galleryArray = explode( ",", $_POST['returned_gallery_work_ids'] );
    

    希望这能有所帮助。

    (1)
    val()
    需要一个字符串,因此传递的任何内容都被视为一个字符串。
    toString()
    方法可能在
    dataId
    上被调用,其默认行为与
    .join(',')
    相同。(2) 什么是
    #返回的\u画廊\u工作\u ID
    ?如果它是一个元素,DOM元素同样需要一个字符串作为它的
    属性。如果您想要一个真正的数组,那么将它作为一个值分配给元素是行不通的。您不能将JavaScript数组发布到服务器上——您需要一个字符串表示形式供PHP解释(可能是原样)或JSON在代码的第4行;'在示例中找不到toString()。在
    val()
    的源代码深处,通过
    dataId+“”
    将输入强制为字符串。为了进行连接,
    toString()
    dataId
    上被隐式调用。另外值得注意的是,javascript中的数组变量只是一个逗号分隔的值字符串。这是否意味着“dataId.join(',)”是多余的,因此需要将“dataId”传递给“.val()”操作符?啊,您已经回答了我的问题…以前的开发人员代码是多余的。我只需要传入“dataId”并将其转换为一个数组,在那里我在别处接收它作为POST数据。谢谢@汤姆:我会保留显式的
    .join(',')
    ,因为你和未来的开发人员可能更容易记住它是如何工作的,而不是依赖于框架和内存。我同意@Cᴏʀʏ您应该保留
    .join(',')
    ,否则,一旦它到达服务器,它肯定会在PHP中爆炸。如果我的答案足够的话,请帮我投票:)