嘿,我有一个脚本正在创建并回显一个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。我正在使用萤火虫。我可以看到有一个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"}]
谢谢,
比利
答案 0 :(得分:0)
使用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);
}
我不确定这是否会对你有所帮助:)
答案 1 :(得分:0)
您返回的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);
});
}
答案 2 :(得分:0)
$.each(products,function(index, arr)
{
var opt = $('<option />');
opt.val(arr[name]);
opt.text(arr[price]);
$('#products').append(opt);
});
我希望它可以帮到你
答案 3 :(得分:0)
尝试在$ .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函数不知道响应数据类型......
答案 4 :(得分:0)
在dataType: 'json'
参数
jQuery.ajax