2016-03-30 14 views
0

私はこの非常に単純化されたAangularJSアプリを持っています。それはとてもうまくいっています。AngularJSのビューでフォームを記入して送信してください

ここで、いくつかのフィールドを入力して、ユーザーの操作なしでビューから直接フォームを送信する必要があります。ここで

は、ここではJavascriptコード(再び、簡素化され、私は他の多くの要素を削除)


          
  
mainApp.controller("resultsController",FormController); 
 
    function FormController($scope,APIService) { 
 
     $scope.result =""; 
 
     $scope.search = { keywords: "", 
 
          result:1, 
 
          term: "-1", 
 
          subject: "-1"}; 
 
     $scope.searchNow = function() { 
 
      APIService.getTheResults($scope); 
 
     } // $scope.searchNow 
 

 
    } 
 

 
    function getResults($http) { 
 
     var results = {}; 
 
     url = "..."; 
 

 
     results.searchResults = function() { 
 
      var lurl = url + "a=s"; 
 
      return $http({method: "JSONP", url:lurl}); 
 
     } // results.searchResults 
 

 
     results.getTheResults = function(scope) { 
 
      var lurl = url; 
 
      $http({ 
 
      method: 'POST', 
 
      url:lurl, 
 
      data:jQuery.param(scope.search), 
 
      headers:{'Content-Type':'application/x-www-form-urlencoded'}}) 
 
       .success(function(lresponse){ 
 
        var theResponse; 
 
        theResponse = eval(lresponse); 
 
        scope.mydata = theResponse.data[0] 
 
       }) 
 
       .error(function(data,status) { 
 
        scope.result = status; 
 
       }); 
 
     } // results.getTheResults 
 
     return results; 
 
    } // function getResults($http)

とは、HTMLビューがあります:

<html lang="en" ng-app="courseCatalog" ng-controller="resultsController"> 
    <!-- some head info --> 
<body> 
<form id="search_form" name="search_form" ng-submit="searchNow()"> 
<!-- 
    form fields in here, for example: 
--> 
    <input type="text" id="txtkeywords" name="keywords" ng-model="search.keywords"> 
    <input type="text" id="txtsubject" name="term" ng-model="search.subject"> 
    <input type="text" id="textterm" name="subject" ng-model="search.term"> 
    <input id="submit-button" name="submit-button" type="submit" 
      value=" Search Now "/> 
</form> 

<!-- Here is the , I pre-populate some form fields --> 
<div id='filter_holder' class='hidden_box'> 
<div class='hidden_box'>{{search.term='1|201601';}}</div> 
<div class='hidden_box'>{{search.subject='6|BIO';}}</div> 
</div> 
<!-- And here, I try to manually submit the form --> 
    <script type="text/javascript"> 
    document.getElementById('submit-button').click(); 
    </script> 
</body> 

しかし、私は、ページを取得しますURL内のすべてのフォームフィールドをリロードする:

... url ... /?txtterm = -1 & txtsubject = -1 & submit-button = +検索+ Now +

私もdocument-form-submitで送信しようとしましたが、結果はありません。

すべての事前入力/送信を削除し、手動で入力してフォームを記入して送信すると、正しい結果が得られます。

ビューからフォームを送信する方法についてのご意見はありますか?

答えて

0

フォームメソッドポストを使用してください。 W3Schoolsのでthis章で述べたように、POSTメソッドを使用したときにデータがURLに表示されなくなり、

<form id="search_form" name="search_form" ng-submit="searchNow()" method="post"> 

:だからあなたのformタグがに変わります。

"投稿したデータがページアドレスの に表示されないため、POSTの方がセキュリティが向上します。"

+0

お返事ありがとうございます。フォームの宣言にmethod = "post"を追加しましたが、ページがループしてループしてしまいました。 – Palomo

+0

同じページにフォームを送信していますか?そうした場合、問題は、ページが読み込まれるたびにフォームを送信しているため、何度も何度も繰り返してしまうことです。 –

0

解決済み:ページがあまりにも速くフォームを送信しようとしていたことに気付きました。まず、フォームがロードされてから5秒後にタイマーを設定し、送信ボタンのクリック機能を呼び出します。 はその後、私はちょうど全体のDOMが作成されたときに呼び出されるwindow.unload機能を使用:

window.onload = function(){ document.getElementById('submit-button').click(); };

そして、それが正常に動作しています。これが他の人々に役立つことを願っています。

ありがとうございます!

関連する問題