$ .post()よりも$ .ajax()の選択に大きな意味がありますか?

jquery
$ .post()よりも$ .ajax()の選択に大きな意味がありますか?
$('.showprayer').click( function(event) {
  $.ajax({
    url: '/show_prayer',
    type: 'POST',
    data { 'name' : $(this).text() },
    dataType: 'script'
  });
});

`$ .post()`関数ではなく:

$('.showprayer').click( function(event) {
  $.post('/show_prayer', { 'name' : $(this).text() }, function(data) {
    eval(data);
  });
});

指定された理由は次のとおりです。

The difference is that this uses `jQuery.globalEval()` which sticks the script
in the  as if it were a normal GET requested , instead of actually
calling `eval()` on it.
</code></pre>

<p><strong>My question is, if this is correct, why is it important for the script to end up in the ? Does that make a big difference over using eval()?</strong></p>

  1  0


ベストアンサー

一般的に言って、 `$ .post()`は実際には `$ .ajax`の単なる省略形です。

リンクする質問の専門とニックの答えは、OPがJavascriptコードを直接実行したいという事実です。 そのための `dataType`パラメーターがあります:

dataType: 'script'

このパラメーターは、 $ .post`では指定できず、 $ .ajax`でのみ指定できます。 このパラメーターを設定すると、返されたデータがjQueryのhttp://api.jquery.com/jQuery.globalEval/ [globalEval()]関数によって評価されます。この関数は、JSコードを、コンテキストではなくグローバルコンテキストで実行します「成功」コールバック。

`dataType`のドキュメントhttp://api.jquery.com/jQuery.ajax/ [こちら]を参照してください。

3


$ .ajaxは少し柔軟性があり、POSTまたはGETを選択でき、現在のケースでは$ .postを残すことができます

1


あなたの例の違いは、実際には.post()と.ajax()の間には何の関係もありません。それは組み込みのJS eval()対です。 jQuery.globalEval()。 これらの違いは次のとおりです。

しかし、彼らはそれが重要な理由を説明するのに素晴らしい仕事をしていません。 問題は次のとおりです。行の通常の評価を行う場合:

 var foo = 5;
post()呼び出し内から、その「foo」変数はその呼び出し内にのみ存在します。 後でそのページで何か他の操作を行うと、その変数は失われます。これは、「投稿」に渡した匿名にスコープが設定されているためです。 対照的に、jQueryの「globalEval」メソッドは、そのfoo変数をウィンドウのプロパティにします。 グローバルスコープになります。 これは、後で実行する他のすべての関数が引き続きアクセスできることを意味します。

(サイドノート:潜在的な命名の競合のため、グローバルスコープに多くの変数を入れることは実際には常に良いアイデアとは限りません。

いずれにせよ、返されるスクリプトの変数がグローバルであるという利点を得るために、投稿の使用を停止する必要はありません。 ただしてください:

$.globalEval(data);

post関数で「eval」の代わりに使用すると、すべて設定できます。

1


$ .ajax`はparamsより優れた制御と柔軟性を提供しますが、 $ .post`、 `$ .get`は単なる短縮形です

0


タイトルとURLをコピーしました