我如何使AJAX从MVC中的控制器中抓取数据?

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

本文关键字:控制器 数据 抓取 MVC 何使 AJAX      更新时间:2023-09-26

我有这个AJAX调用我想做的是让控制器将字符串作为JSON对象返回给AJAX调用所在的视图。事情是这样的。我不知道怎么做,也不知道哪节课能帮我做。我试过的所有方法都不起作用。我的问题是我什么时候用$。post方法我如何使AJAX"抓取"数据从控制器回来?

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

我如何返回任何我想从控制器在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
                });
            }
        }
    }
}

所以,对于那些可能需要我所需要的帮助的新手(因为我一直在寻找这个东西很多年了,没有人回应),你可以这样做:

你的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在返回控制器时知道从控制器"抓取"什么的技巧。确保返回Json(yourDataHere)。如果你想知道,是的,只要在函数中写入'data',它就会自己从控制器中获取yourDataHere。

另外,确保在表单和控制器中都有AntiForgeryToken,或者两者都没有。如果你只在你的控制器中有它,它将不能让你通过JQuery控制一切。

你的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);
});

如果你想返回对象和JSON,使用WebAPI控制器而不是表面控制器,它只会返回一个ActionResult。你可以让Surface控制器返回JSON,但你最好使用API控制器,因为它默认会返回JSON对象,这是你想要的吗?

这里有一些WebAPI控制器的文档!