2017-04-26 4 views
-2

私は本当に巨大なjquery関数を持っています。読みやすくするために、どうやって別の場所に置くことができますか?別の関数(より具体的には、私が今定義したAjax呼び出しの中で)の中で呼び出すだけです。イベントなしですぐに呼び出すことなく関数を定義する(クリック/ホバー...)

問題は、私が関数を定義すると自動的に実行され、その必要がないということです。私はそれをAjax呼び出しの中で実行したいが、そこには定義しない。

$.ajax({ 
    type: 'post', 
    url: 'api/'+$("#id").val()+"/"+$("#from").val()+"/"+$("#to").val(), 
    data: {}, 
    success: function generateChart(data) { 
     var results = JSON.parse(data); 
     if (results.error == true) { 
      var errCode = results.code; 
      alert(errCode); 
     } 
     else { 
      var chartjsTemp = []; 
      var chartjsDate = []; 
      for (var i = 0; i < results.length; i++) { 
       chartjsTemp.push(results[i].probeTemp); 
       chartjsDate.push(results[i].dateProbe); 
      } 
      var ctx = document.getElementById('myChart').getContext('2d'); 
      var button = $("#submitButton"); 
      submitButton.addEventListener("click", function(){ 
       myChart.destroy(); 
      }); 
      var myChart = new Chart(ctx, { 
       type: 'line', 
       data: { 
        labels: chartjsDate, 
        datasets: [{ 
         label: 'temp', 
         data: chartjsTemp, 
         backgroundColor: "rgba(240,240,240,0.5)" 
        }] 
       } 
      }); 
     } 
    } 
}); 

私はどこかに私の「generateChart」機能を入れたい:

は、ここで私が持っているもののサンプルコードです。私は「どこか」それを入れて行う場合は、単に "success: generateChart()"それは動作しませんし、ページのロード時に代わりに実行します。

+3

は、コードの伴侶を表示、私は/の代わりに溶液を得たかもしれない可能性が同じコメントを投稿する – Satpal

+0

*問題は、私が関数を定義すると、自動的に*実行されるということです。私たちにコードを教えてください。 –

+0

'$(document).ready()'関数の外で定義してください。そして、私たちはいくつかのコードスニペットなしであなたを助けることはできません。 –

答えて

1

あなたはこのように、外部の関数を呼び出す必要があります。

function extFunc(data){ 
    ... 
} 

$.ajax({ 
    type: 'post', 
    url: 'xxx', 
    data: {}, 
    success: function generateChart(data) { 
     extFunc(data); 
    } 
}); 
+0

おかげで、それは 'function(data){generateChart(data);}'だったと私は 'generateChart()を呼び出そうとしていた – Newwt

+0

はい、今働く。私は関数内で 'data'を忘れていました。ああ。 – Alessandro

1

あなたが実際にそれらを呼び出すことなく、変数内のすべてのあなたの機能を保存することができるはずです。

var myFunc = function(param1) { 
 
    console.log(param1); 
 
} 
 

 
$(function() { 
 
    myFunc('test'); 
 
    myFunc('test2'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

編集::。それは基本的には同じですあなたのコードサンプルでは だけ定義

ここでは一例です成功関数は外にあり、それを成功のために呼び出す。 success: generateChart(data)の場合は、

success: function(data) { generateChart(data); }でもお試しください。

+0

これはうまくいきました。あなたの答えは、私が本当にばかげた構文エラーをコミットしていることを私に見せてくれました。私はgenerateChart内で 'data'を忘れていました... – Newwt

+0

それはあなたを助けてくれてうれしいです。私はコールバック関数の関数名は不要です – Morfium

1

ただ、AJAX呼び出し外の定義を移動します。

function generateChart(data) { 
    var results = JSON.parse(data); 

    if (results.error == true) { 
     var errCode = results.code; 
     alert(errCode); 
    } else { 
     var chartjsTemp = []; 
     var chartjsDate = []; 
     for (var i = 0; i < results.length; i++) { 
      chartjsTemp.push(results[i].probeTemp); 
      chartjsDate.push(results[i].dateProbe); 
     } 
     var ctx = document.getElementById('myChart').getContext('2d'); 
     var button = $("#submitButton"); 
     submitButton.addEventListener("click", function(){ 
      myChart.destroy(); 
     }); 
     var myChart = new Chart(ctx, { 
      type: 'line', 
      data: { 
       labels: chartjsDate, 
       datasets: [{ 
        label: 'temp', 
        data: chartjsTemp, 
        backgroundColor: "rgba(240,240,240,0.5)" 
       }] 
      } 
     }); 
    } 
} 



$.ajax({ 
    type: 'post', 
    url: 'api/'+$("#id").val()+"/"+$("#from").val()+"/"+$("#to").val(), 
    data: {}, 
    success: function(data) { 
     generateChart(data); 
    } 
}); 
+0

うん、それは(それは)コールバック関数の関数名は不要です: – Newwt

関連する問題