javascript - c.apply ei ole funktio


Tämä koodi antaa minulle tämän virheen: c.apply ei ole funktio Koko koodi toimii hyvin vain, jos käytän yhtä funktiota. En kuitenkaan ole varma, miten käyttää kahta funktiota. Nämä rivit ovat todennäköisesti väärin:

 postHandler(<?php echo get_posts($db, 0, $_SESSION['posts_start']); ?>, <?php echo get_posts1($db, 0, $_SESSION['posts_start']); ?>);

ja

var postHandler = function(postsJSON, postsJSON1) {
$.each(postsJSON, postsJSON1, function(i, post, post1) {

käsikirjoitus

ensimmäinen funktio

function get_posts($db, $start, $number_of_posts) {
       //code
            return json_encode($posts);
        }

tulos :

string '[{"username":"Altitude software","foto_oferta":"thumb\/miniaturas\/oferta\/default_offer.jpg","actividades":"Some activities","id_oferta":77,"oferta":"Programador web" ...

toinen funktio

function get_posts1($db, $start, $number_of_posts) {
       //code
            return json_encode($posts1);
        }

tulos :

string '[{"id_offer":77,"tags":["c++","JAVA"]},{"id_offer":76,"tags":["ajax","php"]},{"id_offer":75,"tags":["PHP","JAVA"]}]'

js

var postHandler = function(postsJSON, postsJSON1) {
                $.each(postsJSON, postsJSON1, function(i, post, post1) {
                    var id = 'post-' + post.id_oferta;

                    $('<div></div>').addClass('post').attr('id',id)
                    .html('<div class="box_offers"><div class="rating_offer"></div><div class="post-title">' 
                            + post.oferta + '</div>  <div class="post-box"> <a class="oferta_val bold_username">'
                            + post1.tags + '</a></div><a id='+id+'hide class="post-more" >Descrição</a><div class="logo_offer">')
                            .appendTo($('#posts'));

                    $('#'+id+'hide').click(function() {
                        $('.'+id+'hidden').slideToggle('fast');
                    });
                }); 
            };

postHandler(<?php echo get_posts($db, 0, $_SESSION['posts_start']); ?>, <?php echo get_posts1($db, 0, $_SESSION['posts_start']); ?>);

Vastaus #1

Uskon, että ongelma on tämä rivi:

$.each(postsJSON, postsJSON1, function(i, post, post1) { 

Yleinen iteraattori $.each() -funktio ottaa vain kaksi parametria, joista toisen on tarkoitus olla funktio. Samoin antamanne takaisinsoittofunktion on tarkoitus ottaa kaksi parametria.

Mikä on aikomuksesi kahden iteroitavan objektin tarjoamisen suhteen samaan aikaan? Jos voit kuvailla tietorakenteesi ja selittää, mitä haluat tehdä, voisin antaa joitakin ehdotuksia. (Näytä JSONisi...)

PÄIVITYS: OK, kysymyspäivityksen perusteella sekä postsJSON että postsJSON1 ovat taulukoita. Tavan perusteella, jolla yritit käyttää molempia samassa funktiossa, näyttää siltä, että taulukon elementtien välillä on yksi-yhteen vastaavuus, eli postsJSON[0] liittyy postsJSON1[0], postsJSON[1] liittyy postsJSON1[1], postsJSON[2] liittyy postsJSON1[2], ja niin edelleen.

Jos näin on, pienin mahdollinen muutos olemassa olevaan koodiisi, jotta se toimisi, olisi tämä:

var postHandler = function(postsJSON, postsJSON1) {
   $.each(postsJSON, function(i, post) {
      var post1 = postsJSON1[i];

      // the rest of your code from inside your $.each() here
   });
};

Eli jatka $.each()-metodin käyttöä, mutta huomioi, että se voi suoraan iteroida vain yhden taulukon kerrallaan, käytä annettua indeksiä i toisen taulukon iteroimiseen rinnakkain asettamalla se manuaalisesti funktion ensimmäiseksi riviksi.

Tai ehkä ilmeisempi tapa tehdä se on perinteisellä for-silmukalla:

var postHandler = function(postsJSON, postsJSON1) {
   var i, post, post1;
   for (i = 0; i < postsJSON.length; i++) {
      post = postsJSON[i];
      post1 = postsJSON1[i];

      // the rest of your code from inside your $.each() here
   }    
};

Kummallakin tavalla käsitellään molemmat taulukot rinnakkain. Tämä edellyttää tietenkin, että taulukot ovat saman pituisia ja että mikä tahansa tiettyyn indeksiin liittyvä kohde on se, mitä haluat yhdistää toisiinsa edellä mainitulla tavalla - jos ei, sinun on annettava lisätietoja siitä, miten taulukot liittyvät toisiinsa.