如何使用javascript从数据属性和id添加数组,并在数组php中组合它们?
我只想问一下,如何从列表顺序上的所有id值和数据速率值合并这两个数组?ul li太多了,所以我需要将它们全部获取并存储到数组中 这是我的javascript代码:如何使用javascript从数据属性和id添加数组,并在数组php中组合它们?,javascript,php,mysql,arrays,Javascript,Php,Mysql,Arrays,我只想问一下,如何从列表顺序上的所有id值和数据速率值合并这两个数组?ul li太多了,所以我需要将它们全部获取并存储到数组中 这是我的javascript代码: var h = []; $("ul.reorder-photos-list li").each(function() { h.push($(this).attr('id').substr(9)); }); var x = [];
var h = [];
$("ul.reorder-photos-list li").each(function() { h.push($(this).attr('id').substr(9)); });
var x = [];
$("ul.reorder-photos-list li").each(function() { x.push($(this).attr('data-rate').substr(9)); });
$.ajax({
type: "POST",
url: "order_update.php",
data: {
ids: " " + h + "",
rate: " " + x + ""
},
success: function(html)
{
window.location.reload();
/*$("#reorder-helper").html( "Reorder Completed - Image reorder have been successfully completed. Please reload the page for testing the reorder." ).removeClass('light_box').addClass('notice notice_success');
$('.reorder_link').html('reorder photos');
$('.reorder_link').attr("id","");*/
}
});
这是我的html代码:
<li id="image_li_<?php echo $row['id']; ?>" class="ui-sortable-handle">
<input id="rate" type="text" value="<?= $row['rate']?>" data-rate="<?php echo $row['rate']; ?>" >
希望有人能帮助我。:)提前谢谢 设置数据时,不需要有多个循环。您可以在数据中循环一次:
var dataArray = [];
$("ul.reorder-photos-list li").each(function() {
var el = $(this),
input = el.children(':input'); // This gets the input decendent of the li
// When adding one item at a time to an array, array[array.length] = item is better
dataArray[dataArray.length] = {
id: el.attr('id').substr(9),
rate: input.val(),
};
});
$.ajax({
type: "POST",
url: "order_update.php",
data: { items: dataArray }, // items gives the PHP something to use as a key in the POST data
success: function(html) {...}
});
您的PHP将如下所示:
// The data passed from the Ajax call is already an array
$itemsArray = $_POST['items'];
// Your function to process the array
function updateOrder($orderArray) {
foreach ($orderArray as $index => $array) {
// $index will already have a count, you need to +1 because it's 0-based
mysqli_query($this->connect, "UPDATE `test` SET `order` = " . ($index + 1) . ", `rate`=" . $array['rate'] . " WHERE id = " . $array['id']);
}
return true;
}
这将创建h/x对的JSON对象
$.ajax({
type: "POST"
, url: "order_update.php"
, data: { JSON.stringify(rates); }
, success: function(html) {
window.location.reload();
/* $("#reorder-helper").html(
* "Reorder Completed - Image reorder have been successfully completed.
* Please reload the page for testing the reorder."
* ).removeClass('light_box').addClass('notice notice_success');
* $('.reorder_link').html('reorder photos');
* $('.reorder_link').attr("id","");
*/
}
});
这将修复您的呼叫以发送正确的数据
您的PHP端需要类似于以下内容:
if(isset($_POST['rates'])) {
$ratesString = $_POST['rates'];
$rates = json_decode($ratesString);
}
// Do other things with $hx`
您的插入查询也已关闭。您需要将每个值声明为变量,否则编译器也会讨厌您的PHP。您的查询中还有一些不必要的引号
function updateOrder($orderArray){
$count = 1;
foreach ($orderArray as $array){
$rate = $array['rate'];
$id = $array['id'];
mysqli_query($this->connect,"UPDATE test SET order = $count, rate = '$rate' WHERE id = '$id'");
$count ++;
}
return true;
}
对于你的HTML,我认为这就是你想要的,但不确定,因为它并没有真正解释的那么好…请随意评论你的意图
<ul>
<?php foreach($orderArray as $array) : ?>
<li id="image_li_<?php echo $array['id']; ?>" class="ui-sortable-handle">
<input id="rate" type="text" value="<?php echo $array['rate']?>" data-rate="<?php echo $array['rate']; ?>" ></li>
<?php endforeach; ?>
</ul>
我现在知道密码了。谢谢你们的帮助,伙计们
var h = [];
$("ul.reorder-photos-list li").each(function() { h.push($(this).attr('id').substr(9)); });
var x = [];
$("input").each(function() { x.push($(this).val()); });
$.ajax({
type: "POST",
url: "order_update.php",
data: {ids: " " + h + "",rate: " " + x + ""},
/*data: { items: dataArray },*/
success: function(html)
{
...
}
});
在Php端:
$idArray = explode(",",$_POST['ids']);
$rateArray = explode(",",$_POST['rate']);
$ids = array();
foreach ($idArray as $id) {
$ids[] = $id;
}
$rates = array();
foreach ($rateArray as $rate) {
$rates[] = $rate;
}
$n = 0;
$orderArray = array();
while( $n <= count($idArray) )
{
$orderArray[] = array("id" => $ids[$n] , "rate" => $rates[$n]);
$n++;
}
$db->updateOrder($orderArray);
function updateOrder($orderArray){
$count = 1;
foreach ($orderArray as $array){
mysqli_query($this->connect, "UPDATE `test` SET `morder` = " . $count . ", `mtoursrate`=" . $array['rate'] . " WHERE id = " . $array['id']);
$count ++;
}
return true;
}
$idArray=explode(“,”,$\u POST['id']);
$rateArray=explode(“,”,$_POST['rate']);
$ids=array();
foreach($id列为$id){
$id[]=$id;
}
$rates=array();
foreach($rateArray作为$rate){
$rates[]=$rate;
}
$n=0;
$orderArray=array();
而($n$id[$n],“rate”=>$rates[$n]);
$n++;
}
$db->updateOrder($orderArray);
函数updateOrder($orderArray){
$count=1;
foreach($orderArray作为$array){
mysqli_查询($this->connect,“UPDATE`test`SET`morder`=”$count.”,`mtoursrate`=“$array['rate']”。其中id=“.$array['id']);
$count++;
}
返回true;
}
请简化您的代码。h是数组而不是逗号分隔的字符串,对吗?和x一样。那么,ids:“+h+”,rate:“+x+”
将打印什么呢?实际上我将它从逗号分解成数组。我想将rateArray合并到id数组中,id数组是多维数组@developerjk错了。我说的是javascript方面。您的php代码是不相关的,因为您的ajax不会发送您认为是的内容。他们从ul li HTMLS获取id和数据速率中的值。因此,很抱歉延迟回复,我只是忘记了速率必须在输入值中。呵呵。不在同一个html元素中<代码>我忘记了jquery是否会在AJAX将JS对象转换到其他地方之前自动将其转换为字符串。我通常使用香草JavaScript,因为我主要从事不需要扩展库的小项目。这也有助于对基础语言及其功能有更深入的理解。@CSS这个答案是我想要的最接近的答案。这里只需要更改rate:el.attr('data-rate').substr(9),
将其设置为输入值。有什么想法吗,伙计?@xerwudjohn,我已经更新了答案中的代码,以便从输入中获取速率。@Jeffwa嗨,伙计,我正在处理数据库问题。我认为利率是价值而不是储蓄。但是id数组是好的。@xerwudjohn这能修复HTML部分吗?如果没有,请多给点提示。你的代码太复杂了,呵呵。这有点难。哈哈,谢谢你的帮助。只是想问一下,你们对如何获取输入值中的所有值有什么想法吗?这是我的代码$(“input.data rate”).each(function(){x.push($(this.attr('value')).substr(9));})代码>输入类名是数据-rate@xerwudjohn我的响应中的第一个块就是这样做的……它创建了一个js对象rates
,其属性为rate
和id
。您可以使用rates.rate
或rates.id
访问属性。如果使用console.log(rates),js对象将打印出类似的内容代码>:{rates:[{id:0,rate:2%},{id:1,rate:2.2%},…]
。这段代码就像我现在想的那样简单。
<ul>
<?php foreach($orderArray as $array) : ?>
<li id="image_li_<?php echo $array['id']; ?>" class="ui-sortable-handle">
<input id="rate" type="text" value="<?php echo $array['rate']?>" data-rate="<?php echo $array['rate']; ?>" ></li>
<?php endforeach; ?>
</ul>
var h = [];
$("ul.reorder-photos-list li").each(function() { h.push($(this).attr('id').substr(9)); });
var x = [];
$("input").each(function() { x.push($(this).val()); });
$.ajax({
type: "POST",
url: "order_update.php",
data: {ids: " " + h + "",rate: " " + x + ""},
/*data: { items: dataArray },*/
success: function(html)
{
...
}
});
$idArray = explode(",",$_POST['ids']);
$rateArray = explode(",",$_POST['rate']);
$ids = array();
foreach ($idArray as $id) {
$ids[] = $id;
}
$rates = array();
foreach ($rateArray as $rate) {
$rates[] = $rate;
}
$n = 0;
$orderArray = array();
while( $n <= count($idArray) )
{
$orderArray[] = array("id" => $ids[$n] , "rate" => $rates[$n]);
$n++;
}
$db->updateOrder($orderArray);
function updateOrder($orderArray){
$count = 1;
foreach ($orderArray as $array){
mysqli_query($this->connect, "UPDATE `test` SET `morder` = " . $count . ", `mtoursrate`=" . $array['rate'] . " WHERE id = " . $array['id']);
$count ++;
}
return true;
}