我正在建立一个应用程序,用户可以在其中重新排序项目(并将订单保存到数据库)。用户重新排序的项目是导航链接,这些链接是从php循环页面动态生成的:
$nav_links.='<li class="collection-item ui-state-default item" data-ord="'.$navorder.'" data-url="'.$pageurlname.'"><a>' .$pagename. '</a></li>';}
$ navorder是导航中页面的顺序 $ pageurlname是用于动态调用页面的字符串(index.php?page = $ pageurlname),并且是表中的唯一键。
我正在使用jqueryUi可排序函数来使进程拖拽和放大drop,它工作正常,每次我重新排序链接,新订单更新为&#34; data-ord&#34; .. sript:
$('#sortable').sortable({
stop: function(event, ui){
$(".sortable li").each(function(i, el){
$(el).attr('data-ord',$(el).index()+1);
});
}
});
现在问题,这是我的ajax脚本:
$(document).on('click','.saveorder',function(){
var neworder = $('.collection-item').attr('data-ord');
var pgurl = $('.collection-item').attr('data-url');
$.ajax({
type:'POST',
dataType:'text',
url:'/rs/pages/nav_order.php',
data: { neworder:neworder, pgurl:pgurl },
success: function(data) {console.log(data); $('#response').html(data);},
error: function(data) {console.log('Error!', data); }
});
});
我是ajax的新手,因此它主要基于我在其他静止版中找到的脚本。 (我能够成功地将cript链接到我的其他功能)但是在这种情况下它不起作用。问题似乎是我试图为多行发布多个数据(此时我有4个链接,我试图重新排序,但链接数可以或多或少)。当我试图获得变量值时,&#34; neworder&#34;和&#34; pgurl&#34; (使用警报),它始终只显示第一个项目的值。
我尝试了很多类似静止的解决方案,但没有一个能够工作,只是因为用户发布表单数据然后序列化,这不是我的情况,因为我不是从表单发送数据。
最后这里是nav_order.php(我想这里也错了,可能需要添加foreach但最初我需要让ajax正常工作):
<?php
include "/rs/include/db.php";
$neworder = $_POST['neworder'];
$pgurl = $_POST['pgurl'];
$query = mysqli_query($Connection, "UPDATE horus_pages SET nav_order='$neworder' WHERE url_name='$pgurl'") or die (mysqli_error($Connection));
echo 'Reordered';
?>
当我检查控制台时,没有数据。
那么请您告诉我如何更正ajax脚本以发送每个对象的数据,然后在php脚本中正确处理它?希望我能清楚地描述我的问题。感谢您的任何帮助。
答案 0 :(得分:0)
把data-id =&#34; your_database_id&#34;在你的链接HTML。如果有多个具有相同href的记录,那么使用href在数据库中选择它们会很慢并且会出错。
你有保存按钮,它发送它找到的第一个链接的顺序和href?当多个项目改变他们的订单时会发生什么?如果你有很多链接,你将为每次保存抛出数百个mysql更新?
你最好把json发送到你的php。这样的事情:
[{id:123,order:332},{id:124,order:334},...]
数据类型:&#39;文本&#39;变成dataType:&#39; json&#39;
如果您不关心可扩展性,那么这将适用于后端。
$data = file_get_contents("php://input");
$links = json_decode($data, true);
foreach($links as $link) {
$order = intval($link['order']);
$id = intval($link['id'])
// UPDATE table SET `order` = '$order' WHERE id = '$id'
}
顺便说一下。你的PHP代码允许SQL注入。那太糟糕了