正确地向控制器发出Ajax调用

时间:2014-03-18 13:32:46

标签: jquery ajax asp.net-mvc-4

创建Ajax调用时,我总是陷入困境。我永远不知道自己错过了什么。我想我已经完成了所有设置,然后它就行不通了。这是一个例子:

                var urlStr = '@Url.Action("CallPowerShell", "BuildApp", new { param1 = "CSE", param2 = "", param3 = ""})';
                //$.get(url, { param1: "CSE", param2: "", param3: "" }, function (data) {
                //    $("#tAreaID").html(data);
                //    debugger;
                //});
                //debugger;
                alert("work");
                $.ajax({
                    type: "GET",
                    url: urlStr,
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function () {
                        alert("Hey, Hey, Hey")
                    },
                    failure: function () {
                        alert("what is going on here?")
                    }
                });

我的ajax电话,通过简单的检查看起来很好。 我的控制器:

    [HttpGet]
    public JsonResult BuildApp(string param1, string param2, string param3) {
        //ServiceController service = new ServiceController(
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = @"powershell.exe";
        startInfo.Arguments = @"& 'C:\CI\Scripts\CaptivaBuildScript.ps1' ''";
        startInfo.RedirectStandardOutput = true;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = false;
        Process process = new Process();
        process.StartInfo = startInfo;
        process.Start();
        string output = process.StandardOutput.ReadToEnd();
        //return ();
        return Json(output);
    }

我总是想念一些东西。说实话,我不确定这是什么时候?看起来我拥有我需要的一切。但是,当我单击链接时,我从来没有使用该方法来调试那里发生的事情。成功进行Ajax Get / Post调用所需的一切是什么?

3 个答案:

答案 0 :(得分:2)

$.ajax没有失败功能。使用错误代替失败。

error:function (){
                    alert("what is going on here?");
                 }

您可以随时检查浏览器控制台是否有错误,这有助于找到代码中的错误。

答案 1 :(得分:1)

这是你的错误,你传递的错误,你有错误的参数,而不是控制器名称,你放置了动作,并在行动中你放置控制器这是错误的,这就是为什么你的ajax调用不工作:

    var urlStr = '@Url.Action("CallPowerShell", "BuildApp",
 new { param1 = "CSE", param2 = "", param3 = ""})';

虽然您的操作名称是BuildApp而不是您的控制器名称,但Url.Action采用第一个参数操作名称和第二个参数控制器:

@Url.Action("ActionName","ControllerName",new {object})

这样做:

var urlStr = '@Url.Action("BuildApp", "CallPowerShell",
                  new { param1 = "CSE", param2 = "", param3 = ""})';

并始终使用firebug扩展来查看ajax调用的确切情况。

答案 2 :(得分:0)

ajax调用中的url必须是实际的URL字符串,如http://yourdomain.com之类的内容。在客户端,Javascript和jQuery不知道服务器或服务器端脚本语言是什么,所以你必须传递一个理解协议的数据,在这种情况下,URL字符串。

                $.ajax({
                type: "GET",
                url: "http://yourdomain.com",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function () {
                    alert("Hey, Hey, Hey")
                },
                failure: function () {
                    alert("what is going on here?")
                }
            });