Ajax 调用在 angularjs 中不起作用

Posted

技术标签:

【中文标题】Ajax 调用在 angularjs 中不起作用【英文标题】:Ajax call is not working in angularjs 【发布时间】:2017-04-07 06:41:07 【问题描述】:

我正在尝试在控制器上实现 ajax 调用以获取所有学生的列表,但我没有通过单击按钮获得它我将代码放在这里请任何人帮助

  module.controller("GetController", function ($scope, $http) 
    $scope.getUser = function () 
        console.log(getUser);
            var getdata=  $.ajax(
            type: 'POST',
            url: "/GetUserDetails",
            dataType: "json",
            contentType: "application/json",
            data: '',
            success: function (data) 
                var parsed = $.parseJSON(data.d);
                $.each(parsed, function (i, jsondata) 
                    $("#showdata").append("ID: " + jsondata.Id + "<br/>" + "FirstName: " + jsondata.FirstName + "<br/>" + "SecondName: " + jsondata.SecondName + "<br/>" + "EmailId: " + jsondata.EmailId + "<br/>" + "Mobile: " + jsondata.Mobile);
                );
            ,
            error: function (XHR, errStatus, errorThrown) 
                var err = JSON.parse(XHR.responseText);
                errorMessage = err.Message;
                console.log(errorMessage);
            
        );
    
);

这里是html

 <div ng-controller="GetController" id="showdata">
   <table>
       <tr>
           <td>Id</td>
           <td>FirstName</td>
           <td>SecondName</td>
           <td>EmailId</td>
           <td>Mobile</td>
       </tr>
       <tr>
           <td>Id</td>
           <td>FirstName</td>
           <td>SecondName</td>
           <td>EmailId</td>
           <td>Mobile</td>
       </tr>
   </table>       
   <input type="submit" ng-click="getUser()" value="Getdata" />

这是控制器代码

 [HttpPost]
    [Route("GetUserDetails")]
    public async Task<bool> GetUserDetails([FromBody]object obj)
    
        return await CenterGateWay.GetStudentlist();

    

【问题讨论】:

失败的具体情况如何? javascript 控制台是否有错误?是否加载了 Angular 和 jQuery?代码是否执行?是否发出了 AJAX 请求?服务器的响应是什么? “它不起作用”不是对问题的非常有用的描述。 (另外,为什么GetStudentListGetUserDetails 返回bool?这似乎......误导。) 控制台没有任何错误 您以错误的方式使用 jquery 和 angular。不要在控制器中进行 DOM 操作,而仅将其推送到您使用 angular 渲染它的模型。 开发工具的网络面板中有什么?您确定收到服务器的任何响应吗? ajax 调用正在工作(当然),但你永远不会看到 dom 更新,因为你没有使用 angularJS 来更新它。请检查这个...***.com/questions/22209117/… 【参考方案1】:

您误用了 jquery 和 angular 的组合。永远不要在你的控制器中进行 DOM 操作,而是让 Angular 来处理它。这样的事情应该可以工作:

$scope.users = [];

$scope.getUser = function () 
    $.ajax(
        type: 'POST',
        url: "/GetUserDetails",
        dataType: "json",
        contentType: "application/json",
        data: '',
        success: function (data) 
            // you have to trigger the digest cycle here,
            // because you use jquery's ajax which won't automatically be
            // picked up by angular
            $scope.$apply(function()
                $scope.users = angular.fromJson(data.d);
            );
        ,
        error: function (XHR, errStatus, errorThrown) 
            var err = angular.fromJson(XHR.responseText);
            errorMessage = err.Message;
            console.log(errorMessage);
        
    );

在你看来:

<table>
    <tr>
        <td>Id</td>
        <td>FirstName</td>
        <td>SecondName</td>
        <td>EmailId</td>
        <td>Mobile</td>
    </tr>
    <tr ng-repeat="user in users">
        <td> user.Id </td>
        <td> user.FirstName </td>
        <td> user.SecondName </td>
        <td> user.EmailId </td>
        <td> user.Mobile </td>
    </tr>
</table>

更好,根本不需要使用jquery:

$scope.getUser = function () 
    $http.post("/GetUserDetails").then(function(data) 
        $scope.users = data.d;
    , function(error) 

    );

【讨论】:

以上是关于Ajax 调用在 angularjs 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 调用在 keyup 函数中不起作用

一些赋值运算符在 AngularJS 表达式中不起作用.. 为啥不呢?

Ajax 在 JQuery 表单插件中不起作用

跨域 Ajax 调用在 Safari 4 和 Safari 5 中不起作用

TinyMCE 在 http 请求 xhr ajax 生成的页面中不起作用

范围绑定在模态弹出窗口angularjs中不起作用