如何让 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 对象,这就是我假设你想要的?
所以,对于可能需要我需要的帮助的任何新手(因为我一直在寻找这个东西 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.
控制一切
所以,我有这个 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 对象,这就是我假设你想要的?
所以,对于可能需要我需要的帮助的任何新手(因为我一直在寻找这个东西 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.
控制一切