2012-01-09 16 views
6

Este código me da este error: c.apply is not a function Todo el código funciona bien solo si utilizo una función. Sin embargo, no estoy seguro de cómo usar dos funciones. Estas líneas son probablemente equivocado:c.apply no es una función

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) { 

guión

primera función

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

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

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

He publicado una respuesta que indica por qué está recibiendo ese error, pero si puede actualizar su pregunta para dar la estructura de los dos objetos devueltos por su PHP (es decir, lo que termina en 'postsJSON' y' postsJSON1 'parameters) Puedo darte un código para iterar sobre ambos en paralelo que debería funcionar con tu código existente (simplemente no quiero perder el tiempo escribiendo sobre la base de una conjetura). – nnnnnn

+0

@nnnnnn El problema es este: tengo una consulta que devuelve nombre de usuario, id, local, oferta, etc. Pero necesito otra función porque necesito obtener las etiquetas para cada oferta. El principal problema es que cada oferta puede obtener muchas etiquetas, por lo que para cada oferta necesito datos de dos funciones de php. La salida json es enorme para publicar – user455318

+0

Publique una muestra de la salida JSON con solo un par de filas de datos en cada una, e indique cómo se relacionan entre sí. Su código actual implica que 'postsJSON' y' postsJSON1' tienen propiedades o elementos (dependiendo de si son objetos simples o matrices) que son uno a uno. ¿Son arreglos? – nnnnnn

Respuesta

6

Creo que el problema es esta línea:

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

La función generic iterator $.each() sólo toma dos parámetros, el segundo de los cuales se supone que es una función. De manera similar, se supone que la función de devolución de llamada que usted proporciona toma dos parámetros.

¿Cuál es su intención en cuanto a suministro de dos objetos para repetir al mismo tiempo? Si usted puede describir sus estructuras de datos y explicar lo que quiere hacer que pude hacer algunas sugerencias. (Muestre su JSON ...)

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

Si ese es el caso, el cambio más pequeño posible a su código existente para conseguir que funcione sería la siguiente:

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, siguen utilizando $.each(), pero señalando que sólo puede recorrer directamente sobre una matriz a la vez utilizar el índice proporcionado i para iterar sobre la otra matriz en paralelo mediante el establecimiento de que hasta manualmente como la primera línea de la función.

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

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

cualquier manera procesará ambas matrices en paralelo.Obviamente, esto supone que las matrices tienen la misma longitud y que los elementos en cualquier número de índice serán los elementos que desea relacionar entre sí como se mencionó anteriormente; de ​​lo contrario, deberá proporcionar más detalles sobre cómo se relacionan las matrices. .

+0

Necesito dos funciones diferentes porque tengo dos consultas diferentes. Es posible pasar más de un parámetro? – user455318

+0

pregunta actualizada. Gracias – user455318