web-dev-qa-db-ja.com

「Uncaught TypeError:DataTablesプラグインおよびjQuery 1.11.3によってトリガーされる「in」演算子を使用して「length」を検索できません」

JQuery Datatablesプラグインを使用して、ページのページネーション、ソート、検索を有効にします。要素は表示されていますが機能していません。また、ページネーションが表示されることもあります。 Chrome consoleでエラーが発生しています:

Uncaught TypeError: Cannot use 'in' operator to search for 'length' in 

デモページはこちらです

このプラグインと一緒にBootstrap=を使用しています。

20
James

このエラーは、jQueryバージョン1.11.3のメソッドisArraylikeが原因です。 (のみ)。メソッドは次のようになります

function isArraylike( obj ) {

    // Support: iOS 8.2 (not reproducible in simulator)
    // `in` check used to prevent JIT error (gh-2145)
    // hasOwn isn't used here due to false negatives
    // regarding Nodelist length in IE
    var length = "length" in obj && obj.length, // <------ THIS IS THE CULPRIT
        type = jQuery.type( obj );

    .......
}

そのバージョンのjQueryは、長さを取得するためにオブジェクトで「長さ」を使用していました。 (私はそれについて何も知りません)。

ただし、jqueryの他のバージョンにはこの問題がないことは知っています。

バージョン1.11.3および2.1.4(Jamesがコメントで指摘したように)にはこの問題があります。

したがって、解決策は、次のバージョンにアップグレードするか、少なくとも1.11.3または2.1.4以外のバージョンを使用することです。

33
Dhiraj

私はRuby on Rails gem jquery-datatables-Railsで作業しています。

GitHubの最後のコミットからgemを直接更新します。

gem 'jquery-datatables-Rails', github: "rweng/jquery-datatables-Rails", branch: "master"

これは私にとってはうまくいきますが、このコミットですぐに新しいバージョンのgemをリリースすると思います。

8
Alex

DataTablesからDataTablesへのアップグレード1.10.7または1.10.8-devがうまくいきませんでした(jQueryを使用して1.11.3)。

JQueryへのダウングレード1.11.2は機能しました(DataTablesを使用10.0.0

5

DataTablesとは無関係ですが、この「長さを検索するための演算子では使用できません」というエラーに遭遇しました。これがエラーの主なGoogle結果であったため、他の人に役立つ場合に備えて、私の問題を応答として投稿したかっただけです。

私が持っていた:

ApplicationIDs: $.map(".application-checkbox:checked", function (checkedApplicationCheckbox, i) {

セレクタを$でラップするのを忘れていたので、修正は、実際のjQuery要素を文字列だけでなくmapへの最初の引数として渡すようにすることでした...

ApplicationIDs: $.map($(".application-checkbox:checked"), function (checkedApplicationCheckbox, i) {

私はこれを投稿するのはほとんど恥ずかしいです;)

乾杯

3
bgs264

JQueryをダウングレードする必要はありません。 aoColumnsを使用して同じエラーを解決しました

$('#id').DataTable( {
    data: [["A", "B"], ["a", "b"]],
    'aoColumns': [ 
        { sWidth: "50%", bSearchable: false, bSortable: false }, 
        { sWidth: "50%", bSearchable: false, bSortable: false }
        ],
    } );

使っています jQuery 2.1.4およびDataTables 1.10.9

3
raghavsood33

Json dataTypeを次のように追加して、同様の問題を修正しました。

$.ajax({
    type: "POST",
    url: "someUrl",
    dataType: "json",
    data: {
        varname1 : "varvalue1",
        varname2 : "varvalue2"
    },
    success: function (data) {
        $.each(data, function (varname, varvalue){
            ...
        });  
    }
});

そして、私のコントローラーでは、そのような文字列を二重引用符で囲む必要がありました(注:Javaではエスケープする必要があります)。

@RequestMapping(value = "/someUrl", method=RequestMethod.POST)
@ResponseBody
public String getJsonData(@RequestBody String parameters) {
    // parameters = varname1=varvalue1&varname2=varvalue2
    String exampleData = "{\"somename1\":\"somevalue1\",\"somename2\":\"somevalue2\"}";
    return exampleData;
}
2
LeHill

私はこれとまったく同じ問題を抱えていましたが、jQueryバージョンは私にとっての犯人ではありませんでした。私の場合、フォームを誤ってシリアル化していました。このエラーが発生したコードは次のとおりです。

$('#form_name').serialize()

使用する必要がありますが。

$('#form_name').serializeArray()

私はこれを行い、私の問題は解決しました。

私が無視したこの小さなピースを捨てるだけです。誰かを助けることができます。

1
Vishal

DataTablesを使用し、AJAXを使用してPHPスクリプトを呼び出す場合、最後に配列をエコーする必要があることに注意してください。最初にjson_encodeでJSONオブジェクトにエンコードする必要はありません。

そう

header('Content-type:application/json;charset=utf-8'); 
echo $myArray // This will do. Do not use echo json_encode($myArray);
exit();

そうしないと、恐ろしいエラーが発生する可能性があります

キャッチされないTypeError:「in」演算子を使用して「length」を検索することはできません

またはこれ

不明なTypeError:未定義のプロパティ 'length'を読み取れません

0
RWC