如何将json结果集加载到java脚本变量

时间:2017-02-22 02:33:32

标签: javascript asp.net-mvc asp.net-mvc-4

我希望将Json结果加载到javascript变量中。那么如何将json结果url或Controller动作加载到javascript变量中呢。

我使用javascript自动建议输入字段中的值。

当我将静态数据与变量一起使用时,以下代码有效。但是,当我通过网址或控制器操作时,它无法正常工作。

脚本

 <script>
$(function () {
    var CorporateNameSearch = [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++",          
      "Java",
      "JavaScript",
      "Lisp",
      "Perl",
      "PHP",
      "Python",
      "Ruby",          
      "Scheme"
    ];

    $("#tags").autocomplete({
        source: CorporateNameSearch
    });
});

查看页面

  <div class="form-group">
         <label class="col-sm-2 control-label" for="tags">Some value:</label>                            
         <div class="col-sm-9">                
         <input type="text" id="tags" name="tags" class="form-control" />
         </div>
  </div>

控制器,返回JSON结果

  public ActionResult JsonData()
    {
        int ProviderID = 100;
        string ProfileUrl = "http://localhost:64423/api/CorporateName/CorporateDetails?pid=" + ProviderID + "";
        System.Net.Http.HttpClient DashBoardclient = new System.Net.Http.HttpClient();
        DashBoardclient.BaseAddress = new Uri(ProfileUrl);
        DashBoardclient.DefaultRequestHeaders.Accept.Clear();
        DashBoardclient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
        HttpResponseMessage dashboardresponseMessage = DashBoardclient.GetAsync(ProfileUrl).Result;
        var DashboardData = dashboardresponseMessage.Content.ReadAsStringAsync().Result;

        return Json(DashboardData, JsonRequestBehavior.AllowGet);            
    }

脚本我试图加载json结果

  var myjson;
    $.getJSON("http://localhost:49359/ConfirmVisit/JsonData", function (json) {
    myjson = json;
   });

     $("#tags").autocomplete({
        source: myjson 
    });

那么,我怎样才能将json结果或控制器动作的url传递到java脚本变量中以在我的视图页面中自动建议?

任何帮助表示赞赏。在此先感谢!!!

2 个答案:

答案 0 :(得分:0)

使用myjson = JSON.parse(myjson)

这会将JSON文本转换为javascript对象,可以在js代码中使用。

答案 1 :(得分:0)

因为getJSON调用是异步的!

使用当前代码,它将尝试对JsonData操作方法进行ajax调用,但是您正在使用myjson变量注册自动完成功能。如果服务器需要10秒钟才能返回响应怎么办?您正在更新成功回调中的myjson(当服务器响应到来时),但您已使用autocomplete变量的原始值调用(注册)myjson

处理ajax调用时,请确保在从服务器收到ajax调用后使用响应/数据。大多数ajax方法都有成功的回调方法,这些方法将在从服务器调用收到响应后执行。

在成功回调中从ajax调用中获得结果时注册自动完成。

$(function () {

    $.getJSON("@Url.Action("JsonData")", function (json) {
        $("#tags").autocomplete({
            source: json
        });
    });

})