如何让 AJAX 从 MVC 中的控制器中获取数据?

How do I make AJAX grab the data from the controller in MVC?

所以,我有这个 AJAX 调用,我想要做的是让控制器 return 字符串作为 JSON 对象返回到我的 ajax 电话是。事情是这样的。我不知道该怎么做,也不知道哪个 class 可以帮助我做到这一点。我尝试过的一切都不起作用。我的问题是,当我使用 $.post 方法时,如何从控制器返回 AJAX "grab" 数据?

既然有人评论我的Javascript,我不介意,我稍后会修复它。问题是

如何 return 我想从 MVC 中的控制器获得任何东西?控制器是我需要帮助的地方

这是我的电话:

<script>
    $(document).ready(function () {
        alert("document ready");

            // Attach a submit handler to the form
        $("#searchForm").submit(function (event) {
            alert("submitsearchForm");
                //event.preventDefault();

                // Get some values from elements on the page:
                var $form = $(this),
                query2 = $form.find("input[id='query']").val(),
                url = "/umbraco/Surface/SearchDictionarySurface/HandleDictionarySearching/";

                alert("query2" + query2);

                // Send the data using post
                var posting = $.post(url, { query: query2 });

                alert(url);

                //Put the results in a div
                posting.done(function (query2) {
                    var content = //bla bla bla;
                    $("#result").empty().append(content);
                    alert(query2);
                });

            });
        });    
</script>

此外,我正在使用 Umbraco。这就是表面控制器的原因:

using MyUmbraco.Models;
using System.Web.Mvc;
using Umbraco.Web.Mvc;

namespace MyUmbraco.Controllers
{
    public class SearchDictionarySurfaceController : SurfaceController
    {
        // GET: SearchDictionarySurface
        [HttpPost]
        [ValidateAntiForgeryToken]
        public JsonResult HandleDictionarySearching(string query)
        {
            if (!string.IsNullOrEmpty(query))
            {

                var query2 = Json.parse(query);

                //return Json object????
                //I NEED HELP HERE
            }

            else
            {
                return Json(new
                {
                    redirectUrl = Url.Action("Index", "Home"),
                    isRedirect = true
                });
            }
        }
    }
}

您的 javascript 中存在一些问题。

尝试遵循这种模式:

posting.done(function (response) {
    var JSONData = JSON.parse(response);
    // do something with your json
    // ....
    // Then append your results in your div.
    $('YOUR DIV SELECTOR').html(THAT YOU WANT TO DISPLAY);
});

如果您想要 return 对象和 JSON,请使用 WebAPI 控制器而不是表面控制器,它只会 return 一个 ActionResult。您可以获得 return JSON 的 Surface 控制器,但最好使用 API 控制器,因为默认情况下 return JSON 对象,这就是我假设你想要的?

Here's some documentation for WebAPI controllers!

所以,对于可能需要我需要的帮助的任何新手(因为我一直在寻找这个东西 AGES 但没有人回应,这是你如何做到的:

你的JQuery回调函数和你的控制器必须有相同的变量。例如:

控制器:

public JsonResult ExampleName(string query)
        {
            if (!string.IsNullOrEmpty(query))
            {

                //YOUR CODE HERE
               return Json(yourDataHere);
            }

            else
            {
                return Json(new
                {
                    redirectUrl = Url.Action("Index", "Home"),
                    isRedirect = true
                });
            }
        }

和JQuery回调函数:

posting.done(function (data) {
                  //your callback function here
                   });

这就是 JQuery 知道控制器 "grab" 在 return 发送什么时的技巧。确保你 return Json(yourDataHere)。如果您想知道,是的,只需在函数中写入 'data',它就会自己从控制器中获取 yourDataHere。

此外,请确保您的表单和控制器中或其中的 none 中都有 AntiForgeryToken。如果你只在你的控制器中有它,它不会让你通过 JQuery.

控制一切