質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

jQuery エラー TypeError: a is not an Object. (evaluating '"length"in a')

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 936

score -31

TypeError: a is not an Object. (evaluating '"length"in a')


というエラーが表示されています。処理はAjax経由でDBの値を取得するというものなんですが、aというのが見当たりません。
これはaいうメソッドをどこかで作成してしまったのでしょうか。

ちなみにAjaxの処理自体は成功しています。

これがコードです。

$(function() {
  var array = [];
  var hotel = null;
  var process = null;
  var top = 0;
  var normaltop = 0;
  var sorttop = 0;
  var normalFlag = false;
  var sortflag = false;

  function hotelClone() {
    var hotel = $("<div>", {
      "class": "hotel"
    });
    var hotelpics = $("<div>", {
      "class": "hotelpics"
    });
    var mainpic = $("<div>", {
      "class": "mainpic"
    });
    var others = $("<div>", {
      "class": "others"
    });
    var hotelinfo = $("<div>", {
      "class": "hotelinfo"
    });
    var hotelname = $("<a>", {
      "class": "hotelname"
    });
    var tags = $("<div>", {
      "class": "tags"
    });
    var rating = $("<div>", {
      "class": "rating"
    });
    var rateposition = $("<span>", {
      "class": "rateposition"
    });
    var price = $("<div>", {
      "class": "price"
    });
    var clear = $("<div>", {
      "class": "clear"
    });

    hotelpics.append(mainpic, others);
    rating.append(rateposition);
    hotelinfo.append(hotelname, tags, rating, price);
    result = hotel.append(hotelpics, hotelinfo, clear);
    return result;
  };

  function getHotels(process, top) {
    return $.post('ajax.php', {
      word: word,
      kind: 'hotels',
      process: process,
      top: top
    });
  };

  function getPics() {
    return $.post('ajax.php', {
      word: word,
      kind: 'pics'
    });
  };

  function getTags() {
    return $.post('ajax.php', {
      word: word,
      kind: 'tags'
    });
  };

  function getRates() {
    return $.post('ajax.php', {
      word: word,
      kind: 'rate'
    });
  };

  function displayHotels(process) {
    // if (process === 'normal') {
    //   normalFlag = true;
    //   sortflag = false;
    //   top = normaltop;
    // } else if (process === 'sortbyprice') {
    //   sortflag = true;
    //   normalFlag = false;
    //   top = sorttop;
    // }
    getHotels(process, 0).done(function(result) {
      hotels = result;
      console.log(hotels)
      // if (hotels.length > 0) {
        // if (normalFlag === true) {
        //   normaltop = normaltop + hotels.length;
        // } else if (sortflag === true) {
        //   sorttop = sorttop + hotels.length;
        // }

        getPics().done(function(result) {
          hotelpics = result;

          getTags().done(function(result) {
            hoteltags = result;

            getRates().done(function(result) {
              hotelrates = result;

              var hotelsClone = []; //これから表示するホテルが入る
              var hotelName = null;
              var href = null;
              var hotelMainPic = null;
              var others1 = null;
              var others2 = null;
              var others3 = null;
              var tags = [];
              var rateWord = null;
              var rate = null;
              var price = null;

              $.each(hotels, function(hotelindx, hotel) {
                hotelsClone.push(hotelClone());
                hotelName = hotel.hotel_name;
                href = 'about.php?hotelid=' + hotel.hotel_id + '&countrycode=' + hotel.country_code;
                hotelsClone[hotelindx].find('.hotelname').append(hotelName);
                hotelsClone[hotelindx].find('.hotelname').attr('href', href);

                tags = [];
                $.each(hoteltags, function(index, hoteltag) {
                  if (hotel.hotel_id === hoteltag.hotel_id && hotel.country_code === hoteltag.country_code) {
                    tags.push(hoteltag.tag);
                  }
                });

                for (var i = 0; i < tags.length; i++) {
                  hotelsClone[hotelindx].find('.tags').append('<span>' + tags[i]);
                }

                price = hotel.price + '/1泊(1人)';
                $.each(hotelrates, function(index, hotelrate) {
                  if (hotel.hotel_id === hotelrate.hotel_id && hotel.country_code === hotelrate.country_code) {
                    rateWord = hotelrate.ratingresult
                    rate = hotelrate.rate;
                    hotelsClone[hotelindx].find('.rating .rateposition').append('<span>' + rateWord);
                    hotelsClone[hotelindx].find('.rating .rateposition').append('<span class="rate">' + rate);
                  }
                });
                hotelsClone[hotelindx].find('.price').append('<span>' + price);

                $.each(hotelpics, function(index, hotelpic) {
                  if (hotel.hotel_id === hotelpic.hotel_id && hotel.country_code === hotelpic.country_code) {
                    hotelMainPic = '<img' + ' src' + '="' + 'imgs/' + hotelpic.main_pic + '">';
                    others1 = '<img' + ' src' + '="' + 'imgs/' + hotelpic.others1 + '">';
                    others2 = '<img' + ' src' + '="' + 'imgs/' + hotelpic.others2 + '">';
                    others3 = '<img' + ' src' + '="' + 'imgs/' + hotelpic.others3 + '">';
                    hotelsClone[hotelindx].find('.mainpic').append(hotelMainPic);
                    hotelsClone[hotelindx].find('.others').append(others1);
                    hotelsClone[hotelindx].find('.others').append(others2);
                    hotelsClone[hotelindx].find('.others').append(others3);
                  }
                });
                hotelsClone[hotelindx].find('.mainpic img').height(300).width(300);
                hotelsClone[hotelindx].find('.others img').height(85).width(85);
              });
              for (var i = 0; i < hotelsClone.length; i++) {
                $('.mainrequirements').after(hotelsClone[i]);
              }
              hotelsClone = [];
              top = 0; //念の為初期化
            });
          });
        });
      // }
    });
  }

  //最初の処理
  displayHotels('normal');


  //ここからクリック処理
  $('#sortbyprice').on('click', function() {
    if (!$(this).hasClass('selected')) {
      $('mainrequirement').removeClass('selected');
      $(this).addClass('selected');
      process = $(this).attr('id');
      $('.hotel').remove();
      displayHotels(process);
      return false;
    }
  });

  //ここからスクロール処理
  $(window).on('scroll', function() {
    if ((normaltop + sorttop) % 5 === 0) {
      var doch = $(document).innerHeight(); //ページ全体の高さ
      var winh = $(window).innerHeight(); //ウィンドウの高さ
      var bottom = doch - winh; //ページ全体の高さ - ウィンドウの高さ = ページの最下部位置

      if (bottom <= $(window).scrollTop()) {
        //一番下までスクロールした時に実行
        if (normalFlag === true) {
          displayHotels('normal');
        } else if (sortflag === true) {
          displayHotels('sortbyprice');
        }
      }
    }
  });
});
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/02/27 17:33

    ひとまずこの質問の私の回答読み直してやり直してください。それだけで解決します。30%でも理解できてたら
    https://teratail.com/questions/175363

    キャンセル

  • m.ts10806

    2019/02/27 17:38 編集

    JavaScriptのコードだけで赤の他人が再現できます?
    jQueryのバージョン、関係するhtmlは最低でもないと。ajaxてphp実行しているならそれもですね。もちろんphpもバージョンは必要。

    ちゃんと質問書いてる間に自分で調べた方が早いと思いませんか?
    赤の他人に質問して解決するというのは本来それだけ面倒でしんどいものです。
    そして自分本意の質問が如何に他人に迷惑か(愚かか)気づきましょう。
    親に頼らないと生きていけない赤ちゃんではないのだから、その頭で考えてアドバイスを活かすように。

    キャンセル

  • Chandler_Bing

    2019/02/27 18:20

    上手く行きました。

    キャンセル

回答 1

check解決した方法

-1

PHPファイルの問題でした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る