如何在javascript中动态设置Ajax请求的"data"属性



我有javascript函数,当单击Kendo.Button()时,它将从几页调用。

这是一个Kendo.Button()

@(Html.Kendo().Button()
.Name("btnSubmit")
.HtmlAttributes(new { type = "button", title= "Report1", url = "/Controller1/Method1/"  })
.Icon("k-icon k-i-file-txt")
.Content("View Details")
.Events(e => e.Click("ShowDetails"))
)

此按钮将具有.HtmlAttribute属性中定义的不同数量的参数,具体取决于页面。一个页面将有 3 个参数,另一个页面将只有一个参数。

单击任一页面上的按钮时,将调用以下javascript

这是我JavaScript

function ShowDetails() {
var URL = this.element.attr("url")
$('#win_wnd_title').text(this.element.attr("title"));
$.ajax(
{
url: URL,
type: 'post',
dataType: "html",
data: ?
contentType: 'application/json; charset=utf-8',
success: function (result) {
var dialog = $("#win").data("kendoWindow");
$("#dataWin").html(result);
dialog.open();
showLoaderPopup();
}
})
}

我需要动态设置data属性,因此当从一个页面调用函数时,我不需要设置参数来data属性。在另一种情况下,我需要这样做。因此,函数中将类似:

If (flag == 1) 
{
var myData =  JSON.stringify({ ID: id, Amount: amount, Desc: desc });
}
else
{
var myData = null 
}

然后在函数中,我为 Ajax 请求设置了data属性:

$.ajax(
{
.
.
.
data: myData 
}
)

因此,只有在特定的按钮上,才会发送参数。

我该怎么做,所以我不会重复相同的 Ajax 逻辑两次只是为了更改data参数?

我会发表评论,但是我没有足够的声誉。

我会像你描述的那样接近它。我会向按钮添加另一个参数:

Button()
.Name("btnSubmit")
.HtmlAttributes(new { type = "button", title= "Report1", url = "/Controller1/Method1/", sendData = "true" })
.Icon("k-icon k-i-file-txt")
.Content("View Details")
.Events(e => e.Click("ShowDetails"))
)

然后使用基于该 html 参数的数据创建局部变量。 像这样:

function ShowDetails() {
var URL = $(sender).data('url');
var myData = null;
if($(sender).data('sendData') == "true")
{
myData = JSON.stringify({ ID: id, Amount: amount, Desc: desc });
}
$.ajax(
{
...
data: myData
success: function (result) {
...
}
})

希望对你有帮助

最新更新