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中爆炸。如果我的答案足够的话,请帮我投票:)