$http get не приводит к успеху или ошибке в AngularJS

Ниже приведено объявление службы WCF RESTful для GET.

[OperationContract]
[WebGet(UriTemplate= "MemberSearch/{MemberName}", ResponseFormat=WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Wrapped)]
string MemberSearch(string MemberName);

Ниже приведен сервис RESTful, который я создал.

public string MemberSearch(string MemberName)
    {
        string MemberId = string.Empty;
        string strSqlConn = string.Empty;

        SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCon"].ConnectionString);
        sqlCon.Open();

        SqlCommand sqlCom = new SqlCommand("Select MemberId From Member Where MemberName Like '%" + MemberName + "%'");
        sqlCom.CommandType = System.Data.CommandType.Text;
        sqlCom.Connection = sqlCon;

        SqlDataReader rd = sqlCom.ExecuteReader();

        while (rd.Read())
        {
            MemberId = Convert.ToString(rd["MemberId"]);
        }
        return MemberId;
    }

Ниже приведены данные в таблице

MemberId MemberName
1   John        
2   Mike        
3   Gracy       
4   Smith       

Ниже приведен код вызова в AngularJS.

var app = angular.module("app", []);
app.controller("main", function ($scope, $http) {
var MemberName = "Jo";

$scope.keyword = '';

$scope.GetAllData = function () {

    $http.get('http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/' + MemberName)
        .success(function (data, status, headers, config) {
            $scope.Details = data;
        })
        .error(function (data, status, header, config) {
            $scope.ResponseDetails = "Data: " + data +
                "<br />status: " + status +
                "<br />headers: " + jsonFilter(header) +
                "<br />config: " + jsonFilter(config);
        });
};
});

Код Angular не приводит ни к успеху, ни к ошибке для этого

URL-адреса указаны ниже.

http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/

Расположение вызова следующее

http://localhost/Caller

Результат службы WCF RESTful выглядит следующим образом:

{"MemberSearchResult":"1"}

ИЗМЕНИТЬ

Место вызова, как показано ниже

<body ng-app="app">
<table id="tblContainer" ng-controller="main">
    <tr>
        <td><input type="button" name="DisplayDetails" value="Display Details" ng-click="GetAllData()"></td>
    </tr> 
    <tr>
        <td>
            <p ng-bind="ResponseDetails"></p>
            {{ResponseDetails}}
        </td>
    </tr>
</table>

Why it is not executing either success or error in AngularJS code.


person CPK_2011    schedule 18.12.2017    source источник
comment
Нет никаких доказательств того, что вы когда-либо звонили $scope.GetAllData(). Не могли бы вы добавить это? Мы также не видим доказательств того, что URL-путь был бы уместным здесь со стороны WCF.   -  person Brian    schedule 18.12.2017
comment
Кроме того, версия AngularJS? .success() недействителен с версии 1.6: stackoverflow.com/questions/35329384/   -  person Brian    schedule 18.12.2017
comment
Ваш код подвержен атакам с помощью SQL-инъекций. Пожалуйста, посмотрите, как использовать параметризованные запросы.   -  person Nikolaj Dam Larsen    schedule 18.12.2017
comment
@ Брайан Да. Я использую AngularJS версии 1.6.5.   -  person CPK_2011    schedule 18.12.2017


Ответы (1)


Вы должны изменить свою функцию $http на это:

$http.get('http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/' + MemberName)
    .then(function(resp) {
        $scope.Details = resp.data;
    }, function(err) {
        var data = err.data;
        var status = err.status;
        var header = err.header;
        var config = err.config;
        $scope.ResponseDetails = "Data: " + data +
            "<br />status: " + status +
            "<br />headers: " + jsonFilter(header) +
            "<br />config: " + jsonFilter(config);

    });

Мой ответ предполагает, что у вас есть кнопка или ссылка, которая вызывает это из вашего пользовательского интерфейса.

Я также предполагаю, что вы перебираете список пользователей (ng-repeat) и предлагаете изменить свой метод на то, что показано ниже, и вызывать так: GetAllData(memberId).

$scope.GetAllData = function (memberId) {
    $http.get('http://localhost/MemberEligibilityDemo/MemberService.svc/MemberSearch/' + memberId)
    // abbreviated
}
person Brian    schedule 18.12.2017
comment
С приведенным выше ответом меня казнят then. Он возвращает объект и как его десериализовать? - person CPK_2011; 18.12.2017
comment
Это зависит от того, что возвращается... это должен быть объект JSON. Если у него есть свойство name, это будет resp.name и т. д. - person Brian; 18.12.2017