【问题标题】:update a variable of Javascript file from my c# function从我的 c# 函数更新 Javascript 文件的变量
【发布时间】:2013-11-13 14:57:56
【问题描述】:

我在 c# 中有一个函数,它获取广告的预算和 Id-s,并将这些广告的所有预算更新为预算值为 budget

[HttpPost]
public ActionResult UpdateAdsBudgets(string budget, string[] Ids)
{
    ServerResult serverResult = null;
    try
    {
        int numOfSuccess = 0;
        for (int i = 0; i < Ids.Length; i++)
        {
            serverResult = UpdateAdBudget(Ids[i]);
            if (serverResult.ServerResultState == ServerResultState.SUCCESS)
            {
                numOfSuccess++;
            }
         }
     }
 }

我在我的js 文件中调用了这个函数:

$.ajax({
    dataType: 'json',
    type: "POST",
    traditional: true,
    url: "/AdsController/UpdateAdsBudgets",
    data: { budget: budget, Ids: adsIds },
    success: function (serverResult) {

    },
    error: function (exception) {
    }
});

是否有显示带有被调用函数信息的消息的选项?我的意思是:2/5 ads were updated,其中 2 是 numOfSuccess(我的 c# 文件的变量),5 是:adsIds.length

我知道我可以做很多 ajax 调用(对于每个广告)然后将其计入成功,但是是否有一个选项可以让 c# 的函数在线更新我的 js 文件中的变量? (假设变量:“numberOfSuccededAds”)。

任何帮助表示赞赏!

【问题讨论】:

    标签: c# javascript asp.net-mvc-3


    【解决方案1】:

    为什么不只是 return Json(YOR_DATA_YEAR) 并在您的 JavaScript ajax 函数的 success 处理程序中处理它。

    public ActionResult UpdateAdsBudgets(string budget, string[] Ids)
    {
        ServerResult serverResult = null;
        try
        {
            int numOfSuccess = 0;
            for (int i = 0; i < Ids.Length; i++)
            {
                serverResult = UpdateAdBudget(Ids[i]);
                if (serverResult.ServerResultState == ServerResultState.SUCCESS)
                {
                    numOfSuccess++;
                }
             }
         }
    
         return Json(YOUR_DATA); 
     }
    

    【讨论】:

    • 但是这样,只有在调用结束时,我才知道成功的广告数。我很难解释,但我希望更新警报消息:“1/5 广告已更新”,当第二个广告更新时,警报消息:“2/5 广告已更新”等。
    • @AlonShmiel:您正在谈论从服务器到客户端的推送通知。服务器说:我完成了这个 => 信号,完成了另一个 => 信号。为此,请查看:signalr.net。 WebSocket,服务器和客户端之间的持久通信。或者您可以为每个 Id 进行不同的 AJAX 调用,在上一个成功时调用下一个,人为地创建一个对服务器的调用链。
    【解决方案2】:

    您可以像这样从控制器返回JsonResult

    [HttpPost]
    public ActionResult UpdateAdsBudgets(string budget, string[] Ids)
    {
        ServerResult serverResult = null;
        try
        {
            int numOfSuccess = 0;
            for (int i = 0; i < Ids.Length; i++)
            {
                serverResult = UpdateAdBudget(Ids[i]);
                if (serverResult.ServerResultState == ServerResultState.SUCCESS)
                {
                    numOfSuccess++;
                }
             }
         }
        return Json(numOfSuccess);
     }
    

    然后您可以在 Javascript 中发出警报以通知用户。

     $.ajax({
         dataType: 'json',
         type: "POST",
         traditional: true,
         url: "/AdsController/UpdateAdsBudgets",
         data: { budget: budget, Ids: adsIds },
         success: function (serverResult) {
            alert(serverResult + "/" + adsIds.length + " ads were updated");
         },
            error: function (exception) {
         } });
    

    【讨论】:

    • 但是这样,只有在调用结束时,我才知道成功的广告数。我很难解释,但我希望更新警报消息:“1/5 广告已更新”,当第二个广告更新时,警报消息:“2/5 广告已更新”等。
    • 哦,所以您想要实时推送通知?首先,您不能为此使用警报,因为您无法更新警报框的文本。至于通知,您可以为每个 Id 在循环中多次调用服务,也可以使用 SignalR asp.net/signalr
    【解决方案3】:

    是否有c#的函数会在线更新我的js文件中的一个变量的选项

    不,您的 ASP.NET 服务对客户端一无所知,您唯一的选择是将其所需的信息作为帖子的一部分传回,例如

    [HttpPost]
    public ActionResult UpdateAdsBudgets(string budget, string[] Ids)
    {
        ...
        return Json(numOfSuccess);
    }
    

    然后在您的success 回调中

    success: function (serverResult) {
        alert(serverResult+ '/' + adsIds.length + ' ads were updated');
    }
    

    【讨论】:

    • 但是这样,只有在调用结束时,我才知道成功的广告数。我很难解释,但我希望更新警报消息:“1/5 广告已更新”,当第二个广告更新时,警报消息:“2/5 广告已更新”等。
    • @AlonShmiel 啊,我明白了。在这种情况下,您需要多次调用服务器并更新客户端的计数器。
    • 好的,我想知道有什么办法,但再次感谢您!
    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多