繁体   English   中英

PHP:通过jQuery ajax帮助检索JSON

[英]PHP: Retrieving JSON via jQuery ajax help

嘿,我有一个脚本正在创建并回显magento产品的JSON编码数组。

我有一个使用jQuery的ajax函数调用此脚本的脚本,但没有得到正确的响应。 执行GET请求时,萤火虫显示

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。 我正在使用萤火虫。 我可以看到已经有一个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"}]

谢谢,

比利

jQuery.ajax参数中添加dataType: 'json'

使用cache: false作为您的AJAX参数之一...

我知道当我在AJAX中使用JSON时,我必须这样做:

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

我不确定这是否对您有帮助:)

您要返回的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); 
       });
  }
$.each(products,function(index, arr)
{
      var opt = $('<option />');
      opt.val(arr[name]);
      opt.text(arr[price]);
      $('#products').append(opt);
});

希望对您有帮助

尝试在$ .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函数不知道响应数据类型...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM