PHP: получение JSON с помощью jQuery ajax help - PullRequest
2 голосов
/ 14 февраля 2011

Эй, у меня есть сценарий, который создает и отображает JSON-кодированный массив продуктов magento.

У меня есть скрипт, который вызывает этот скрипт с помощью функции jQuery ajax, но я не получаю правильный ответ. Когда запрос GET выполнен, firebug отображает

GET http://localhost.com/magento/modules/products/get.php 200 OK then a **red cross** then 361ms 

Это скрипт, который создает массив:

 // Load product collection
 $collection = Mage::getModel('catalog/product')->getCollection();
 $collection->addAttributeToSelect('name');
 $collection->addAttributeToSelect('price');

 $products = array();

 foreach ($collection as $product){
     $products[] = array("price" => $product->getPrice(),
                         "name" => $product->getName() );
 }

 header('Content-Type: application/x-json; charset=utf-8');
 echo(json_encode($products));

Вот мой JQuery:

<script type="text/javascript">
        $(document).ready(function() {
            $.ajax({
                type: "GET",
                url: "http://localhost.com/magento/modules/products/get.php",
                    success: function(products)
                    {
                        $.each(products,function()
                        {
                            var opt = $('<option />');
                            opt.val(this.name);
                            opt.text(this.price);
                            $('#products').append(opt);
                        });
                    }
            });
        })
</script>

Я получаю ответ от этого, но я не вижу JSON. Я использую Firebug. Я вижу, что был ответ в кодировке JSON, но вкладка ответа - emtyp, и у моих полей выбора нет опций.

Может кто-нибудь увидеть и проблемы с моим кодом?

Вот ответ, который я должен получить (и получаю, когда запускаю скрипт вручную через браузер):

[{"price":"82.9230","name":"Dummy"},{"price":"177.0098","name":"Dummy 2"},{"price":"76.0208","name":"Dummy 3"},{"price":"470.6054","name":"Dummy 4"},{"price":"357.0083","name":"Dummy Product 5"}]

Спасибо

Билли

Ответы [ 5 ]

0 голосов
/ 12 января 2016

Добавить dataType: 'json' в jQuery.ajax параметр

0 голосов
/ 05 марта 2011

Попробуйте добавить свойство типа данных в объект конфигурации $ .ajax:

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type: "GET",
            url: "http://localhost.com/magento/modules/products/get.php",
            dataType : 'json',
            success: function(products) {
                $.each(products,function() {
                    var opt = $('<option />');
                    opt.val(this.name);
                    opt.text(this.price);
                    $('#products').append(opt);
                });
            }
        });
    })
</script>

Возможно, функция $ .ajax не знает тип данных ответа ...

0 голосов
/ 14 февраля 2011

PHP, который вы возвращаете, не является массивом объектов, как вы относитесь к нему в своем JavaScript.

Измените ваш PHP на:

$products = array();
foreach( $collection as $product ) {
  $products[] = array( "price" => $product->getPrice(),
                       "name" => $product->getName() );
}

Это должно вернуть JSON, который выглядит следующим образом:

[{"price":"82.9230","name":"Dummy"},{"price":"177.0098","name":"Dummy 2"}, etc ]

jQuery.each должен иметь возможность перебирать возвращенный массив объектов:

success: function(products) 
{
  jQuery.each(products,function()
       {

       var opt = jQuery('<option />'); 
          opt.val(this.name);
          opt.text(this.price);
          jQuery('#products').append(opt); 
       });
  }
0 голосов
/ 04 марта 2011
$.each(products,function(index, arr)
{
      var opt = $('<option />');
      opt.val(arr[name]);
      opt.text(arr[price]);
      $('#products').append(opt);
});

Надеюсь, это поможет вам

0 голосов
/ 14 февраля 2011

используйте cache: false, как один из ваших параметров AJAX ...

Я знаю, когда я использовал JSON в AJAX, я должен был сделать это:

                    success: function(data) {
                      $(".custName, .projectDesc").empty();
                      for(var x in data) {
                         $(".custName").append(data[x].message1);
                         $(".projectDesc").append(data[x].message2);
                    }

Яне уверен, поможет ли это вам или нет :) 1007 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...