Angular js $ http帖子无效

时间:2016-07-15 04:53:55

标签: javascript jquery angularjs http-post

我使用http post使用以下代码从Web服务获取数据..

$http({
                method: "post",
                url: "SurveyQuestions.asmx/GetSurveyQuestions",
                data: JSON.stringify({"empl_id" : '12345' , "Year" : '2015' }),
                headers: { 'Content-Type': 'application/json' },
                dataType: "json",
                contentType: "application/json; charset=utf-8",
            }).success(function (response) { //do something})

上面的代码在没有参数的情况下使用“get”正常工作。

我的帖子的网络服务是

<WebMethod()> _
        <ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False)> _
        Public Sub GetSurveyQuestions(ByVal Empl_id as string, ByVal Year as string)
        Try
        //get list of records
          Dim js As JavaScriptSerializer = New JavaScriptSerializer

          Context.Response.Write(js.Serialize(listSurveyQuestions))
        Catch ex As Exception

      End Try

    End Sub

Web服务执行正常并将数据返回到Method,但$http中的响应为空并且出错。

2 个答案:

答案 0 :(得分:0)

你只是尝试传递对象,只在URL中的最后添加。

这是我的情况我只是添加了员工ID。如果您只发送员工对象,它也会更正。

$scope.removeEmployee = function(employee) {

var method = 'DELETE';

var url = 'http://localhost:8080/AngularJSWithRestful/rest/product/Delete/' + employee.id  ;

$http({

    method : method,
    url : url,

}).then(function successCallback(response) {

    $scope.product = response.data.product;

    }, function errorCallback(response) {

    });
};

答案 1 :(得分:0)

因为您正在检索数据并且您的服务器上没有执行任何更改(根据您的评论),最好的做法是将其更改为HttpGet方法。然后在angular中你应该在传递的对象中使用params属性到$ http函数。这是因为HttpGet不支持邮件正文。来自documentation

  

params - {Object.<string|Object>} - 将使用paramSerializer序列化并附加为GET参数的字符串或对象的映射。

您更改的代码:

$http({
    method: "GET",
    url: "SurveyQuestions.asmx/GetSurveyQuestions",
    params: {"empl_id" : '12345' , "Year" : '2015' }, // use the params property
    headers: { 'Content-Type': 'application/json' },
    dataType: "json",
    contentType: "application/json; charset=utf-8",
}).then(function (response) { //do something})

另请注意,成功和错误被角色团队标记为过时。建议的方法是使用then代替。请参阅相同的文档链接。

  

弃用通知

     

$ http遗留承诺方法成功与错误已被弃用。请改用标准方法。如果$ httpProvider.useLegacyPromiseExtensions设置为false,则这些方法将抛出$ http / legacy错误。

另见AngularJS passing data to $http.get request