2013-04-30 10 views
17

$ httpを使用して新しいコメントを送信しようとしています。あなたはタイトルから推測したかもしれません:それは動作していません。私はショアバージョンとロングバージョンを試しましたが、どちらも失敗します。コンソールエラーはありません。

これは私のコードです:

$scope.comment = {}; 
$scope.comment["comment"] = message; // message defined somewhere else 

$http.post('/api/items/'+$scope.item.id+'/comments', $scope.comment) 
    .success(function(data, status, headers, config) { 
     // this isn't happening: 
     console.debug("saved comment", $scope.comment); 
    }) 
    .error(function(data, status, headers, config) { 
     // this isn't happening: 
     console.debug("saved comment", $scope.comment); 
    }) 
} 

誰もがこの作業を行う方法上の任意のアイデアを得ましたか。ありがとう!

UPDATE:

私は正常に動作している今、jQueryのAJAX呼び出し、としてそれをやっています。それは角を使って動作するようにするのは良いことだ。しかし、これは私のjQueryのコードです:

  var request = $.ajax({ 
       url: '/api/items/'+$scope.item.id+'/comments', 
       type: "POST", 
       data: JSON.stringify($scope.comment), 
       contentType: 'application/json; charset=utf-8', 
       dataType: "json" 
      }); 

      request.done(function(msg) { 
       console.debug("saved comment", $scope.comment); 
      }); 

      request.fail(function(jqXHR, textStatus) { 
       alert("Request failed: " + textStatus); 
      }); 

誰もがこれをangularifyする方法任意のアイデアを持っている場合は、それを適切な方法を行うにはいいだろう、私に教えてください....

+0

あなたはこれらのコード行が実行されていますか? – meze

+0

はい。コメントを設定した後、console.debugは正しいデータを記録します。しかし、$ http.postは動作していないようです。このURLに投稿した – Dine

+0

は、フィドラーから言いますか? id 5のアイデアがこのurl works/api/ideas/5/commentsに投稿されていると仮定していますか? –

答えて

3

を私が思うに、あなただけの忘れてしまいました私はまだそれをテストしていないが、私は賭け

$http.post('/api/ideas/'+$scope.item.id+'/comments', $scope.comment) 
    .success(function(data, status, headers, config) { 
    // this isn't happening: 
    console.debug("saved comment", $scope.comment); 
    }) //<-- damn ")" 
    .error(function(data, status, headers, config) { 
    // this isn't happening: 
    console.debug("saved comment", $scope.comment); 
    }) //<--- damn ")" 
} 

を試してみてください 「)」いくつかは残酷な、これは よろしく

+0

これは非常に有効な点ですが、残念ながらこれは問題ではありません。これは単にstackoverflowに入ってしまいましたが、実際には私のアプリで正しいです(私は今stackoverflowで修正しました)。おそらくコンソールにエラーが発生している可能性があります。だからええ - まだ動作していません... – Dine

+0

これまでにエラーが見つかりましたか? – rashadb

+0

私たちにそれを働かせるために何かをすることができるPlunker ..を提供してください – Prasad

-1
$http.post('/api/ideas/'+$scope.item.id+'/comments', $scope.comment).success(function(data, status, headers, config) {}).error(function(data, status, headers, config) {}); 
エラーです
+0

あなたの返事をありがとう。これはまさに私が試した+タイプミスの括弧であり、私にとってはうまくいきません。まだ答えを探しています。 – Dine

+0

あなたのコードが何をしているのか、それがどのように初期の問題を解決するのかを簡単に説明してください。 1行のコードを削除しないでください。 – user1438038

0

コントローラを$ httpオブジェクトで初期化する必要があります。あなたが使用したい他の角度サービスについても同じです。

例えば:

function myCtrl($scope, $http) { 
    // controller code 
} 
+0

私は$ httpオブジェクトを注入しました。しかし、提案をありがとう。 – Dine

0

あなたが試すことができます。 JS

角度ポストコール:

$http({ 
     url:'/api/ideas/'+$scope.item.id+'/comments', $scope.comment, 
     method : 'POST' 
    }).success(function(data, status, headers, config){ 
    }).error(function(data, status, headers, config){ 
    }); 

休憩コントローラー:

@RequestMapping 
    (value = "/api/ideas/{item_id}/comments/{comment}", method = RequestMethod.POST) 
    @ResponseStatus(HttpStatus.OK) 
    public void updateComments(@PathVariable String item_id,@PathVariable String comment) { 
     } 
5

これはあなたを助けるでしょう。私は同様の問題を持っていました:AngularJS $http not firing get call

ここではhttps://github.com/angular/angular.js/issues/2794#issuecomment-18807158の解決策で解決しましたので、私は$ scopeで呼び出し関数をwrapしました。

$scope.$apply(function() { 
       console.log('Klic na ID ' + data.context.id); 
       $scope.commonController.getData('orgunit/' + data.context.id + '?jsonDepth=3') 
        .success(function(workpositionData,status,headers,config) { 
         console.log('Klic na ID ' + data.context.id + ' OK'); 
         $scope.workPositions = workpositionData.workPositions; 
        }).error(function(data,status,headers,config) { 
         commonController.error('Pri branju delovnih mest je prišlo do napake: '+data.description); 
        }); 
      }); 
+0

これは意味があります。リンクされたページには、$ httpが約束を作成し、約束事は$ダイジェストサイクル内でのみ解決されることが記述されています。 @Dine、コードはどこで実行されますか? 'setTimeout'内またはjQuery/DOMイベントリスナー関数内で実行される場合、それが問題です。 $ scope。$ apply()を呼び出す必要があります。$ apply()は$ digestサイクルをトリガーします。 –

0

私は同じ問題を抱えていました。私がそれを解決する方法は、.then() を使用し、引数として成功とエラーのコールバックを登録することでした。あなたの場合:

$http.post('/api/items/'+$scope.item.id+'/comments', $scope.comment) 
    .then(
    // success callback 
    function(response) { 
     console.debug("success - saved comment", $scope.comment); 
    }, 
    // error callback 
    function(response) { 
     console.debug("error - saved comment", $scope.comment); 
    } 
); 
6

リクエストを行う前に具体的にContent-Typeを設定しようとしましたか?

私は同じ問題を抱えていましたが、Content-Typeの設定で修正しました。

$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 
+0

これは私のためにやった。 – yoaquim

-1
angular.module('RestService', [ 

]).factory('$RestService', [ 
    '$http', 'ApiUrl', 
    function ($http, ApiUrl) { 
     return {   
      Functioname: function (request) { 
       var Requesturl = ApiUrl + "/Functionname";//www.test.com/getuserdata 
       return this.Post(Requesturl, request);//request :parameter which you want to pass in post request 
      }, 
      Post: function (ResultUrl, RequestParameterData) { 
       var PostResponse = $http({ 
        url: ResultUrl, 
        method: "POST", 
        dataType: "", 
        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, 
        data: RequestParameterData 
       }); 
       return PostResponse; 
      }, 
      Get: function (ResultUrl, RequestParameterData) { 
       var PostResponse = $http({ 
        url: ResultUrl, 
        method: "GET", 
        dataType: "", 
        headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, 
        data: RequestParameterData 
       }); 
       return PostResponse; 
      } 

     }; 
    } 


]); 
関連する問題