0

i am relatively new in django and angualarJs.The problem is that angularJs is not responding the get method properly.I have a webpage developed by django where i have a search field.For the execution of search i use a angularJs functionality that is ng-submit and write angularJs code to return value using get method.May be i made a mistake here.you can see my code... here is my template which containing the angularJs also...

<div class="navbar navbar-default " ng-controller="NavCtrl">
    <form action="" class="navbar-form navbar-right" ng-submit="search()">
        <input class="form-control col-lg-8" type="text" placeholder="Search" ng-model="term"></input>
    </form>
</div>

<script>
    app.controller("NavCtrl", ['$scope', '$http', '$location', '$q', '$timeout',
        function NavCtrl($scope, $http, $location, $q, $timeout) {
            $scope.results = ["Test"];
            $scope.term = "";
            $scope.reqs = "5";
            $scope.pics = "45";
            $scope.ddata = "asdasd";
            $scope.ddata = $http.post("{% url 'get-nav-info' %}").success(
                function (result) {
                    //$scope.reqs = result.data.data.num_request;
                    //$scope.pics = result.data.data.num_photo;
                    return result.data;
                }
            );
            //$scope.reqs = $scope.ddata.num_request;
            //$scope.pics = $scope.ddata.num_photo;

            $scope.search = function () {
                //alert("test");
                //$location.absUrl("{% url 'search-term-show' %}").search({'term':$scope.term}).apply();
                //$location.path("{% url 'search-term-show' %}").search({'term':$scope.term}).apply();
                $http.get("{% url 'search-term-show' %}?term=" + $scope.term).success(function (result) {
                    return result.data;
                });
                //$scope.$apply();
            }
        }
    ]);
</script>

now the problem is that while i press enter ,there is no result,but if i manually write this URL which is http://www.kothay.com/searchphoto/?term=a in the address bar then the result is showing .In mention,this url is the that url which should be appear in the address bar when i press the enter to search my photos.But with the enter press its not appearing in the address bar and that's why the results are not showing.I hope you can understand what i am trying to say.May be there is a mistake in my code.Please help me to fix this problem.

2
  • I think you need to save your result.data in a scope when success callback is called. Commented Nov 26, 2013 at 5:39
  • can you please give me the solution in detail? Commented Nov 26, 2013 at 5:42

1 Answer 1

1

You are doing thing wrong.

1st, the success is a defer of get, so return result.data and returns it to the get deferred and there it goes to the heaven. So if you would like to keep the current architecture it should look more like this

$scope.search = [];
getsearch = function () {
                $http.get("{% url 'search-term-show' %}?term=" + $scope.term).success(function (result) {
                    $scope.search = result.data;
                });
            };
getsearch();

2nd that can still not update your UI cuz if the ctrl function is over and the digest is over before your response it wont update your UI cuz its in another scope (not $scope, but the programmatically term scope). The solution to this is to put your data in a service and in your ctr just do.

function ctrl($scope, myservice){
  $scope.data = myservice;
}
ng-repeat="x in data.results"

Here is a full tutorial http://bresleveloper.blogspot.co.il/2013/08/breslevelopers-angularjs-tutorial.html

And last thing its just a good practice to always have .error(...)

Sign up to request clarification or add additional context in comments.

4 Comments

I wanted it to load a new page, but it still is not loading a new page against getsearch(). If I inspect it, I see that it is working (200 OK) against the request.
user a service, here is a full tutorial
where is a full tutorial?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.