TypeError:$ .ajax(…)は関数ではありませんか?


231

MySQLデータベースからデータを返す単純なAJAXリクエストを作成しようとしています。以下が私の機能です:

function AJAXrequest(url, postedData, callback) {
    $.ajax() ({
        type: 'POST',
        url: url,
        data: postedData,
        dataType: 'json',
        success: callback
    });
}

...そしてここで私はそれを呼び出し、必要なパラメータを解析します:

AJAXrequest('voting.ajax.php', imageData, function(data) {
    console.log("success!");
});

それでも、成功コールバックは実行されず(「成功!」がコンソールに記録されないため)、コンソールにエラーが表示されます。

TypeError: $.ajax(...) is not a function.
success: callback

これは何を意味するのでしょうか?成功イベントが$ .ajax内で匿名関数をトリガーする前にAJAXリクエストを実行しましたが、今は別の名前付き関数(この場合はコールバック)を実行しようとしています。これについてどうすればよいですか?


2
jqueryが含まれているかどうか
Arun P Johny 2013

2
この$ .ajax()({を$ .ajax({に変更します
Prabhu Murthy

3
$.ajax引数なし($.ajax())で呼び出し、戻り値は関数ではないjqXHRオブジェクトです。したがって$.ajax()(...)、エラーがスローされます。
Felix Kling 2013

2
jquery.jsを含めなかったか、関数呼び出しの下にjquery.jsを含めたか、jQuery.ajaxを試してください($をjQueryに置き換えてください)。
Pranay Bhardwaj 2013

90
私の場合、それは私がajax関数を取り出すJQueryのスリムな縮小バージョンを使用したためです
TomNg

回答:


952

ここでの答えはどちらも役に立ちませんでした。問題は、私がjQueryのスリムビルドを使用していたことです。これにはいくつかのものが削除されており、ajaxもその1つです。

解決策:通常の(圧縮されているかどうかにかかわらず)バージョンのjQueryをここからダウンロードして、プロジェクトに含めます。


56
これは私の問題を解決したものです!一体何jQuery ?? $.ajax「スリム」ビルドから削除されるのはなぜですか?
samnau 2017年

57
スリムビルドは別の犠牲者を主張した。
ドリューケネディ

49
Bootstrapからコードをコピーしました。彼らはスリムバージョンを使用しています。たぶんあなたも?
Cyril N.

126

スリムバージョンではなくフルバージョンのjqueryを使用しているかどうかを再確認してください。

私はjqueryに付属するjquery cdn-scriptリンクを使用していました。問題は、これがデフォルトで関数を持たないslim.jquery.jsであるajaxということです。したがって、(Bootstrapウェブサイトからコピーして貼り付けた)スリムバージョンのjqueryスクリプトリンクを使用している場合は、代わりにフルバージョンを使用してください。

つまり、<script src="https://code.jquery.com/jquery-3.1.1.min.js"> 代わりに使用する ことです <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"


27

確かではありませんが、コードに構文エラーがあるようです。試してください:

$.ajax({
  type: 'POST',
  url: url,
  data: postedData,
  dataType: 'json',
  success: callback
});

隣に余分なブラケットが$.ajaxありましたが、不要でした。それでもエラーが発生する場合は、jQueryスクリプトファイルがロードされていません。


2
構文エラーではありません。戻り値は、そうではない関数であることが期待されていました。
Felix Kling 2013

ああ、なるほど。本当に、この問題は、jQueryスクリプトファイルの参照が欠落しているだけです。
Jason Evans

3
いいえ$.ajax()();。これは有効なJavaScriptです。それは「呼び出し$.ajaxとそれが返すものは何でも、それも呼び出します」を意味します。ただし$.ajax、(呼び出される可能性がある)関数は返されませんjqXHR。オブジェクトが返されるため、エラーがスローされます。あなたの答えは正しいです、追加()は問題ですが、問題の説明は正しくありません(それは構文エラーではなく、少なくともパーサーではありません)。
Felix Kling 2013

いいえ、申し訳ありませんが、それは私が以前のコメントで述べていたことです。構文は有効であるため、これは構文エラーの問題ではなく、$。ajax()の使用時に読み込まれないjQueryスクリプトファイルの問題です。
Jason Evans

2
いいえ、jquery.jsは欠落していません(それがエラーだった場合はに関するエラーです$)が、有効なJSであるという点で構文エラーでもありません。これは目的の動作に適切な構文ではないため、Felixで説明されているようにランタイムエラーが発生します。
nnnnnn 2013

9

Jqueryドキュメントのチェックアウト

非推奨の通知:jqXHR.success()、jqXHR.error()、およびjqXHR.complete()コールバックは、jQuery 3.0以降では削除されています。代わりに、jqXHR.done()、jqXHR.fail()、およびjqXHR.always()を使用できます。


3
これは、すべての質問に関連していない、これらの非推奨の方法のいずれもがこの質問で使用されていない...
ケビン・B

3

AJAX関数にエラーがあり、括弧が多すぎます。代わりに試してください $.ajax({


3

ajaxを含むjquery minバージョンを参照します。

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

2

引数リストを定義するためにajax関数と別の括弧のセットの後に括弧を配置したため、構文エラーがあります:-

あなたが書いたように:-

$.ajax() ({
    type: 'POST',
    url: url,
    data: postedData,
    dataType: 'json',
    success: callback
});

ajaxの周りの括弧は削除する必要があります:-

$.ajax({
    type: 'POST',
    url: url,
    data: postedData,
    dataType: 'json',
    success: callback
});

1

私は同じ質問に遭遇し、私の解決策は、JQueryスクリプトを追加することでした。

特に、firefox / chromeでjsをデバッグするときは、対応するJQueryがロードされていることを確認する必要があります。


1

ブートストラップhtmlテンプレートを使用している場合は、テンプレートの下部にあるjquery slimへのリンクを忘れずに削除してください。回答はまだコメントできないので、ここにこの詳細を投稿します。


0

これをnodejsで実行しようとする人にとっては:jqueryはブラウザ(または同様のもの)を必要とするため、そのままでは機能しません!私は、インポートを実行するために取得しようとロギングだったconsole.log($)書いて[Function]も、当時とconsole.log($.ajax)戻りましたundefined。私はなかったtscエラー、intellijからのオートコンプリートもあったので、何が起こっているのだろうと思っていました。

その後、ある時点nodeで、それがtypescriptではなく問題である可能性があることに気付きました。私はブラウザで同じコードを試してみましたが、うまくいきました。それを動作させるには、実行する必要があります:

require("jsdom").env("", function(err, window) {
    if (err) {
        console.error(err);
        return;
    }

    var $ = require("jquery")(window);
});

(クレジット:https : //stackoverflow.com/a/4129032/3022127


-1

これは回答には遅すぎますが、この回答は将来の読者にとって役立つかもしれません。

複数のhtmlファイル(1つの基本htmlと複数のサブHTML)があり、$。ajaxがサブHTMLの 1つで使用されているというシナリオを共有したいと思います。

サブHTMLでjsがURL " https://code.jquery.com/jquery-3.5.0.js "を介して含まれ、ベース/親HTMLでURLを介して含まれているとします-" https://code.jquery .com / jquery-3.1.1.slim.min.js "、その後、JSのスリムバージョンは、このサブHTMLと上記のベースHTMLを使用するすべてのページで使用されます。

これは、「https://code.jquery.com/jquery-3.1.1.slim.min.jsを使用してjsをロードするブートストラップフレームワークを使用する場合に特に当てはまります。」。

したがって、問題を解決するには、すべてのページでjsがURL「https://code.jquery.com/jquery-3.5.0.js」またはすべてのJQueryライブラリを含む最新のURLを介して含まれていることを確認する必要があります。

Lily H.にこの回答を教えてくれてありがとう。


-2

私の経験を共有させてください:

私のhtmlページデザイナーの使用:

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>

単純なAJAXリクエストを作成すると、TypeError:$ .ajax(…)は関数ではないというエラーが表示されます

だから、私は追加します:

<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>

その後、少なくとも私にとっては完全に機能します。


いいえ。jQueryをロードしてすぐにjQueryで上書きすると、まったく意味がなくなり、帯域幅の浪費になります。
クエンティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.