我正在创建送货状态报告以及我想要完成的工作,我似乎无法弄明白。在我的报告表中,我有一个按钮,它显示" Mark as Shipped"。如果我点击该按钮,它会改为说"发货"。这对我来说就像一个简单的报告方法一样。
我正在进行文本交换......
<script>
//Getting Shipping Status button to chance from 'mark as shipped' to 'shipped'
$("button").on("click", function(e) {
e.preventDefault()
var el = $(this);
el.text() == el.data("text-swap")
? el.text(el.data("text-original"))
: el.text(el.data("text-swap"));
});
</script>
我必须添加
e.preventDefault()
进入代码,因为单击按钮后页面会重新加载。
我遇到的一个问题是它不允许我回到原版。我尝试将e.preventDefault()移到该代码的底部,但它没有帮助。
现在我的问题的主要部分是我希望在我选择它之后能够保存。我不确定我是否必须抓住我正在做的事情,将其存放在数据库中,或者如果我能用我现有的代码执行它...我绝对需要它来保存一次虽然选择。
然后最后一件事。我只是按一下按钮就不知道怎么做。我知道如何使用php,但我对JS很新。
当我选择&#34;标记为已发货&#34;我想要一个d-t -y的时间戳,并在我的td行中添加时间。这可能与JS有关吗?
我正在寻找能够完成所有这些工作的方法。我看了一遍,似乎找不到任何类似于我想要的东西。
有什么想法吗?
更新
我将它全部添加到指示的相同脚本中。现在我的按钮根本没有变化,也没有任何东西发送到数据库。
<script>
$.ajax({
url: "shippingStatusSend.php",
data: {action: "Shipped", order: order_id},
type: "POST",
dataType: "text"
}).done(function(r){
//Do your code for changing the button here.
//Getting Shipping Status button to chance from 'mark as shipped' to 'shipped'
$("button").on("click", function(e) {
e.preventDefault()
var el = $(this);
el.text() == el.data("text-swap")
? el.text(el.data("text-original"))
: el.text(el.data("text-swap"));
});
});
</script>
PHP页面名为shippingStatusSend.php
我刚开始学习如何做好准备好的陈述,所以这也可能是一个问题。
<?php
//connection to db
$con = mysqli_connect("localhost", "root", "", "bfb");
//Check for errors
if (mysqli_connect_errno()) {
printf ("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$order_id = trim($_POST['order_id'] );
$status = trim($_POST['action'] );
/* create a prepared statement */
if ($stmt = mysqli_prepare($con, "INSERT INTO shippingStatus (order_id, status, date_Shipped) VALUES (?, ?, NOW())")) {
/* bind parameters for markers */
$stmt->bind_param('is', $order_id, $status);
/* execute query */
$stmt->execute();
/* close statement */
mysqli_stmt_close($stmt);
}
?>
答案 0 :(得分:1)
为了使JavaScript更改为静态,您需要使用某些服务器端,例如使用PHP将更改存储在数据库中。
为此,您需要使用AJAX,这很容易使用jQuery:
$.ajax({
url: "example.php",
data: {action: "Shipped", order: orderID},
type: "POST",
dataType: "text"
}).done(function(r){
//Do your code for changing the button here.
});
将example.php
更改为将成为更改服务器端的PHP脚本,并确保通过您正在更改的订单的orderID
。在PHP文件中,您可以访问$_POST['action']
和$_POST['order']
以从JavaScript获取信息。
然后在done
部分(在AJAX完成后调用),您可以更新按钮。你也可以在那里进行一些错误检查以确保安全。 r
变量可以用于PHP文件中的任何响应数据(例如,如果您回复&#34;完成&#34;在PHP中,r
将等于&#34;完成&# 34。)
修改强>
根据您更新的问题/代码,您的问题是您在页面加载时创建AJAX调用,而不是在按钮单击时创建。将其更改为:
$("button").on("click", function(e) {
e.preventDefault();
var el = $(this);
$.ajax({
url: "shippingStatusSend.php",
data: {action: "Shipped", order: order_id},
type: "POST",
dataType: "text"
}).fail(function(e,t,m){
console.log(e,t,m);
}).done(function(r){
//Do your code for changing the button here.
//Getting Shipping Status button to chance from 'mark as shipped' to 'shipped'
el.text() == el.data("text-swap")
? el.text(el.data("text-original"))
: el.text(el.data("text-swap"));
});
});
<强>更新强>
要获得order_id
,您需要将其存储在DOM中的某个位置。根据您的意见,您可以在:
<td class="tdproduct"><?php echo $row['order_id']; ?> </td>
类似于:
var order_id = $('.tdproduct').text();
将获取id,但前提是你只有一个元素。否则你必须存储一些其他独特元素才能抓住。
在重新加载时保存
在数据库中保存了值后,您需要让PHP在页面加载时进行渲染。不要让静态html说Mark as Shipped
,而是使用PHP echo
或print
从数据库输出信息。