【问题标题】:How do I make AJAX grab the data from the controller in MVC?如何让 AJAX 从 MVC 中的控制器中获取数据?
【发布时间】:2016-10-10 08:27:07
【问题描述】:

所以,我有这个 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
                });
            }
        }
    }
}

【问题讨论】:

  • 我不知道你的框架,但是要让 Ajax 接收响应,你必须输出 Json 而不是返回它。
  • 你想用这个声明做什么$(query2).find("#content")?。 query2你的回复是Json格式吗?
  • 伙计们,我之前提到过。忽略这部分,我稍后会解决这个问题,我需要帮助的是设置控制器。这只是一个测试,那行代码,所以我会说。 '我现在不知道,因为我还没有达到那个地步'。
  • @Justinas 如何在控制器中执行此操作?这就是我要问的。
  • 您的帖子是否返回任何内容?例如,当它提醒 query2 作为 done 调用的一部分时,它会说什么?在您的 chrome 检查器中,在网络中,对帖子的调用是否返回 200 或其他状态?

标签: javascript jquery model-view-controller umbraco


【解决方案1】:

所以,对于任何可能需要我所需帮助的新手(因为我一直在为 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 在返回控制器时知道从控制器“抓取”什么的诀窍。确保您返回 Json(yourDataHere)。如果您想知道,是的,只需在函数中写入“数据”,它就会自行从控制器中获取 yourDataHere。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 当它是来自 JQuery 文档的精确副本时,我的 javascript 有什么问题吗?编辑:这听起来有点冒犯,我不是那个意思。我的意思是我的问题甚至不存在。我无法设置控制器返回任何东西。这就是我需要帮助的地方。剩下的我会自己解决。非常感谢帮助。你能解释一下 JSON.parse(response); 是什么吗?在这种情况下会做吗?
    • 把链接发给我^^
    • 好的,我明白了,在这个例子中,Jquery 帖子的返回是 html,所以他们解析的是 html,而不是 JSON ;) 不要为你的用例遵循这个例子 ;) 顺便说一句,我没有知道 Umbraco,但医生说要返回这样的东西:return Json(YOUR DATA, JsonRequestBehavior.AllowPost);
    • 所以如果我从用户那里返回查询(你放置了你的数据的地方)那么回调函数会自动抓取它吗?
    【解决方案3】:

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

    Here's some documentation for WebAPI controllers!

    【讨论】:

    • 感谢您的链接,我在 Our.Umbraco 论坛上看到了 API 控制器与 Surface 的争论,这是一个偏好问题。由于我已经使用 Surface 设置了所有内容,因此我想使用它。另外,你的帖子没有回答我的问题。不过,我感谢您的努力。
    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多