我在JavaScript中使用了AJAX,我想发送一些参数,并在某个条件为真时将按钮值从锁定设置为解锁。但它不起作用,我的意思是它没有进入AJAX。
这是我的代码,使用按钮onclick函数调用:
<script type="text/javascript">
function change() {
var elem = document.getElementById("lockId");
var orderid = document.getElementById("order_no");
if (elem.value == "Lock") {
$.ajax({
type: 'POST',
data: {Lock_Id: 1, Order_No: orderid},
url: '@Url.Action("LockClick","Orders")',
success: function (result) {
elem.value = "Unlock";
}
});
} else if (elem.value == "Unlock") {
$.ajax({
type: 'POST',
data: {Lock_Id: 0, Order_No: orderid},
url: '@Url.Action("LockClick","Orders")',
success: function (result) {
elem.value = "Lock";
}
});
}
}
</script>
非常感谢帮助,我可能在某个地方犯了错误。
答案 0 :(得分:1)
首先,您需要将原生javascript数据对象转换为JSON。就像那样:
data:JSON.stringify({Lock_Id: 1, Order_No: parseInt(orderid)})
您还需要指定AJAX请求的内容类型:
contentType: 'application/json',
你在js代码中也有以下错误:
var orderid = document.getElementById("order_no")
现在有序你有对象,而不是元素的值。我假设在orderid上你只有简单的html输入字段。在这种情况下,您需要通过以下方式替换字符串:
var orderid = document.getElementById("order_no").value;
此外,您需要将 orderid 解析为int,因为它来自 .value 为字符串而您期望整数在你的控制器方法中。
感谢您发布控制器代码。它有几个小错误。请使用以下字符串进行修复:
public ActionResult LockClick(int Lock_Id, int Order_No, int cust_acctNo = 0, int store_id = 0)
请确保您已完全按照客户端javascript中的名称命名方法参数 - 这将使您的代码更加严格和直观。
我添加了 cust_acctNo 参数的默认值,因为您从未将其从客户端传递到服务器端 - 在您的示例中,您只传递了两个参数而不是三个参数
现在应该可以了。
请在下面找到修正的javascript代码:
<script type="text/javascript">
function change() {
var elem = document.getElementById("lockId");
var orderid = document.getElementById("order_no").value;
if (elem.value == "Lock") {
$.ajax({
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ Lock_Id: 1, Order_No: parseInt(orderid) }),
url: '@Url.Action("LockClick","Index")',
success: function (result) {
elem.value = "Unlock";
}
});
} else if (elem.value == "Unlock") {
$.ajax({
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ Lock_Id: 0, Order_No: parseInt(orderid) }),
url: '@Url.Action("LockClick", "Index")',
success: function (result) {
elem.value = "Lock";
}
});
}
return false;
}
</script>
答案 1 :(得分:0)
问题可能是ajax请求的url
参数:
url: '@Url.Action("LockClick","Orders")',
如果查看浏览器的开发工具,在网络选项卡中,请求的实际URL是什么?
脚本是否嵌入某种模板中?是否可以在任何时候编译模板并将该字符串转换为实际的URL?
如果在if语句的每个分支中放置一个警报,那么会发生什么? elem.value
等于什么?这可能是type conversion of the loose equality operator(==
)的问题,具体取决于elem.value
的类型。
答案 2 :(得分:-2)
最后,orderId行可能缺少.value
。应该是:
var orderid = document.getElementById("order_no").value;