Конвертировать вызов ajax в пост http angularjs

У меня есть существующая служба WCF (не RESTful), которую я вызываю с использованием $.ajax. Мне нужно иметь возможность использовать сервис $ http. Я перепробовал несколько вещей, но, похоже, ничего не получалось. Приведенный ниже фрагмент успешно возвращает xml, и я согласен с этим, поскольку не могу изменить службу для возврата json.

var Type = "POST";
var Url = "http://localhost:83928/BookReviewService.svc";
var Data = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetBookReviews xmlns="http://tempuri.org/"><bookReviewsRequest xmlns:a="http://schemas.datacontract.org/2004/07/BookModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><a:AmazonCustomerReviewUrl i:nil="true"/><a:AmazonSiteLinkUrl i:nil="true"/><a:Isbn>0393324826</a:Isbn></bookReviewsRequest></GetBookReviews></s:Body></s:Envelope>';
var ContentType = "text/xml; charset=utf-8";
var DataType = "xml";
var ProcessData = true;
CallService();

function CallService() {
    $.ajax({
        type: Type, //GET or POST or PUT or DELETE verb
        url: Url, // Location of the service
        data: Data, //Data sent to server
        contentType: ContentType, // content type sent to server
        dataType: DataType, //Expected data format from server
        processdata: ProcessData, //True or False
        beforeSend: function (xhr) {
            xhr.setRequestHeader("SOAPAction", "http://tempuri.org/IBookReviewService/GetBookReviews");
        },
        success: function (msg) {//On Successfull service call
            ServiceSucceeded(msg);
        },
        error: ServiceFailed// When Service call fails
    });
}

function ServiceFailed(result) {
    console.log(result);
    console.log('Service call failed: ' + result.status + ' ' + result.statusText);
}

function ServiceSucceeded(result) {
    console.log(result);
}

1 ответ

Ваш вопрос гласит: "преобразовать вызов ajax в пост http angularjs".

Для начала вам нужно создать сервис / фабрику для всех ваших операций ajax, но это всего лишь личное предпочтение, без него тоже будет работать, прочитайте это, если вы не хотите использовать сервис / фабрику и делать это напрямую.

angular.module("moduleName").factory('factoryName', ['$http', function ($http) {
    return {
        myFunction: function(data) {
            return $http({
                url: '/user/update',
                method: 'POST',
                data: data
            });
        }
    };
}]);

и в вашем контроллере внедрить этот сервис и использовать эту функцию, как

factoryName.myFunction();

Конечно, с обратными вызовами успеха / ошибки, если это необходимо.

Другие вопросы по тегам