Búsqueda de sitios web

javascript - c.apply no es una función


Este código me da este error: c.apply no es una función Todo el código funciona bien solo si uso una función. Sin embargo, no estoy seguro de cómo usar dos funciones. Estas líneas probablemente estén mal:

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

y

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

guion

primera función

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

salida :

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

segunda función

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

salida :

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']); ?>);

Respuesta #1

Creo que el problema es esta línea:

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

La función iteradora genérica $.each() solo toma dos parámetros, el segundo de los cuales se supone que debe ser una función. De manera similar, se supone que la función de devolución de llamada que proporcionas debe recibir dos parámetros.

¿Cuál es tu intención en cuanto a suministrar dos objetos para iterar sobre ellos al mismo tiempo? Si puedes describir tus estructuras de datos y explicar lo que quieres hacer, podría hacer algunas sugerencias. (Muestra tu JSON...)

ACTUALIZACIÓN: OK, según la actualización de la pregunta, tanto postsJSON como postsJSON1 son arreglos. Dada la forma en que estabas intentando usar ambos desde dentro de la misma función, parece que los elementos dentro de los arreglos tienen una relación uno a uno, es decir, postsJSON[0] se relaciona con postsJSON1[0], postsJSON[1] se relaciona con postsJSON1[1], postsJSON[2] se relaciona con postsJSON1[2], y así sucesivamente.

Si ese es el caso, el cambio más pequeño posible en tu código existente para que funcione sería este:

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

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

Es decir, continuar usando $.each(), pero teniendo en cuenta que solo puede iterar directamente sobre un arreglo a la vez, usa el índice proporcionado i para iterar sobre el otro arreglo en paralelo configurándolo manualmente como la primera línea de la función.

O quizás la forma más obvia de hacerlo es con un bucle for tradicional:

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
   }    
};

De cualquier manera, se procesarán ambos arreglos en paralelo. Obviamente, esto asume que los arreglos tienen la misma longitud y que los elementos en un número de índice dado serán los elementos que deseas relacionar entre sí como se mencionó anteriormente; si no, necesitarás proporcionar más detalles sobre cómo están relacionados los arreglos.