Как отображать данные через функцию $.get с помощью jQuery?

У меня возникла эта проблема, с которой я когда-то боролся, и теперь мне нужна помощь: у меня есть следующий массив

array(2) {
  [0]=>
  object(stdClass)#4 (4) {
    ["id"]=>
    string(1) "1"
    ["idMake"]=>
    string(1) "1"
    ["modelName"]=>
    string(6) "Legend"
    ["modelYear"]=>
    string(4) "1986"
  }
  [1]=>
  object(stdClass)#5 (4) {
    ["id"]=>
    string(1) "2"
    ["idMake"]=>
    string(1) "1"
    ["modelName"]=>
    string(3) "MDX"
    ["modelYear"]=>
    string(4) "2000"
  }
}

Как я могу использовать функцию $.get() через jQuery, чтобы иметь что-то вроде этого:

id   Model      Year
  1    Legend     1986
  2    MDX        2000

Я уже пробовал следующее:

файл process.php:

<?php
require 'DataLayer.class.php';
$dl = new DataLayer();

//get car make models
$models = $dl->getCarModels($id);
if(isset($models)){
    echo json_encode(json_encode($models));
}
else{
    echo 'failed';
}
?>

функция getCarModels:

public function  getCarModels($id){
    $stmt = $this->pdo->prepare("SELECT  * FROM model WHERE idMake=? ORDER BY modelName");
    $stmt->execute(array($id));
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}

Функция Javascript, вызываемая при переходе по некоторым ссылкам

function getCarModels(id, make){
    $.get(process.php, function(data){       
        var models = $.parseJSON(data); 
        for(var model in models.model.modelName){ // I got stuck here

        } 
    });
} 

Надеюсь, это имеет какой-то смысл для кого-то. Спасибо.

Просто найдите аналогичную проблему по этой ссылке: многомерный массив php в jQuery я даю попытка.


Как я уже говорил с самого начала, моя проблема очень похожа на ту, что опубликована по этой ссылке многомерный массив php в jQuery. Мой единственный вопрос заключается в том, что я действительно не знаю, почему они используют функцию json_encode() дважды, поскольку все, что я сделал, чтобы заставить ее работать правильно, - это удалить одну из функций json_encode().

Буду признателен за некоторое объяснение причины, по которой я использовал только функцию jsan_encode() для получения желаемого результата, в то время как в большинстве учебников это было два раза перед выводом данных.

Еще раз спасибо.


person lomse    schedule 16.03.2012    source источник
comment
Может помочь использование firebug для просмотра содержимого models, а также содержимого ответа GET от сервера.   -  person Justin Ethier    schedule 16.03.2012
comment
Спасибо за предложение: у меня есть следующая строка: [{id:1,idMake:1,modelName:Legend,modelYear:1986},{id:2,idMake:1,modelName:MDX,modelYear:2000}] не слишком уверен как я могу обрабатывать этот тип строки вместо массива   -  person lomse    schedule 16.03.2012
comment
ой, ой, что возвращается, это массив json, вы можете использовать метод Jquey $.each для его перебора. если вы не уверены, используйте режим отладки firebug, чтобы увидеть, что происходит, как предложил @justin   -  person black sensei    schedule 16.03.2012
comment
Ну, у меня есть пустой ответ, используя режим отладки firebug. Довольно странно...   -  person lomse    schedule 16.03.2012


Ответы (1)


Вам не нужно использовать parseJSON в jQuery ajax, jQuery уже справится с этим. Ваши данные представляют собой массив объектов. Вот пример, чтобы перебрать его с помощью $.each

Ваша функция getCarModels() не настроена на отправку данных

function getCarModels(id, make){

     var dataToServer={ id: id, make: make};/* need to match these keys to $_GET keys in php*/
    $.get(process.php, dataToServer, function(data){       
        $.each( data, function(i, item){
            $('body').append('<p>'+item.modelName+'</p>');
        })
    });
}

У php также есть проблемы, похоже, вы не ищете $_GET из ajax для перехода к вашим методам запроса. Я не узнаю функции фреймворка, используемые в вашем php, но для передачи идентификатора в getCarModels в pphp вам понадобится что-то вроде:

 $id=$_GET['id'];
 //get car make models
 $models = $dl->getCarModels($id);
person charlietfl    schedule 16.03.2012
comment
без parseJSON 'оповещение (данные)' дает мне '[{\id\:\1\,\idMake\:\1\,\modelName\:\Legend\,\modelYear\:\1986\},{\ id\:\2\,\idMake\:\1\,\modelName\:\MDX\,\modelYear\:\2000\}]' Я думаю, это из-за 'json_encode(json_encode($models))' Я использовал в файле process.php. Я нашел очень похожую проблему на этой странице: [Переполнение стека](stackoverflow.com/questions/7383919/). Я продолжаю иметь неопределенное значение, как и '$.each(models, function(){ alert(models[0]['modelName']); })' - person lomse; 16.03.2012
comment
используйте json в качестве типа данных в ajax или используйте $.getJSON, а также, если возникают проблемы, добавьте заголовок application/json в php и убедитесь, что больше ничего не повторяется. - person charlietfl; 16.03.2012