使用ajax

时间:2019-05-29 12:23:49

标签: c# ajax asp.net-mvc api

我正在尝试根据一个或另一个API的JSON响应来连接2-3个API的行为。我正在使用ASP.NET MVC和香草JS。

目标是使用场所API(Algolia),以便用户可以从自动完成输入框中选择一个位置,然后选择将名称变量从JSON传递到下一个API,即天气API(DarkSky)。< / p>

Algolia API完全基于JS,并使用Algolia提供的以下html元素和脚本在客户端上运行:

<input type="search" id="address-input" placeholder="Search for a place.." />
<script>
    var placesAutocomplete = places({
        appId: "my-app-id",
        apiKey: "my-api-key",
        container: document.querySelector('#address-input')
    });
</script>
<script src="https://cdn.jsdelivr.net/npm/places.js@1.16.4"></script>

选择位置后,API返回以下JSON结构:

{ 
"query": "new york", 
"suggestion": { 
"name": "New York", 
"country": "United States of America", 
...},
...
}

我想使用名称属性(即“纽约”)并将其传递给后端API客户端,以便可以将其用于对DarkSky API的GET请求。

我制作了一个AJAX脚本,用于将该值回传到我的MVC Controller,但是经过反复试验,我仍然不知道如何设置Controller动作来接收数据并将其提供给其余用户使用后端。

这是ajax脚本:

<script>
placesAutocomplete.on('change', function resultSelected(e) {
        var place = e.suggestion.name || '';
        $.ajax({
            type: 'POST',
            url: 'Ajax', //name of the action in the Home controller
            data: { place }
        })
    });
</script>

您能否指导我,我的动作应该是什么样,并且我的ajax脚本还可以。

谢谢!

2 个答案:

答案 0 :(得分:1)

您的控制器动作应如下所示:

public class PlaceController : Controller
{
    [HttpPost]
    public JsonResult Search(string place)
    {
       // process
       return Json(place, JsonRequestBehavior.AllowGet);
    }
}

您的AJAX请求

    var place = "New York";
    $.ajax({
        type: 'POST',
        url: "/Place/Search", or // @Url.Action("Search", "Place")
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: { place : place },
        success: function(data){

        }
    });

答案 1 :(得分:0)

ajax调用中的if (ModelState.IsValid) { // ... the code you have in here is unchanged } using (MyConnectionString _context = new MyConnectionString()) { var list = (from d in _context.Departments select new { d.DepartmentId, d.DepartmentName }).ToList(); SelectList dList = new SelectList(list, "DepartmentId", "DepartmentName"); ViewBag.DepartmentId = dList; } return View(); 参数的格式应为url,其中“ baseUrl”是URL的明确部分,它告诉您域名。例如-'http://localhost:23456/api'

类似这样的东西:

baseUrl+"controllerName/actionName"