2012-09-12 67 views
0

我正在创建一个模块,它通过GET请求获取SKU并返回一个具有该产品属性的JSON对象。Magento模块GET请求不被接收

我indexController的功能代码如下所示

public function pinboardgetitemsAction(){ 
    $sku = $_GET[sku]; 

    $product = Mage::getModel('catalog/product') 
      ->loadByAttribute('sku', $sku); 

    $fullItem = array(); 

    $fullItem[0] = $product->getName(); 
    $fullItem[1] = $product->getFormatedPrice(); 
    $fullItem[2] = $product->getSmallImageUrl(); 

    echo json_encode($fullItem); 

} 

当我加载在浏览器这个请求时,它正确返回JSON对象

http://www.jinkou.info/pinboard/index/pinboardgetitems?sku=50065

然而,当我做一个AJAX请求(我我正在使用jQuery)$ sku未设置并且引发致命错误。

看到这种行为,最简单的方法是使用http://hurl.it

+0

Typo? '$ sku = $ _GET [sku];'应该是'$ sku = $ _GET ['sku'];' – benmarks

+0

一种错字,尝试使用和不使用引号,都在浏览器中工作,而不是hurl.it –

回答

1

除了我错字评论,访问PARAMS适当的方式是通过请求对象:

$sku = $this->getRequest()->getParam('sku'); 
+0

谢谢,不知道这个功能。我换了“$ sku = $ _GET [sku];”用你提供的线,但仍然是相同的问题。 –

+0

然后你有一个数据问题。 – benmarks

+0

你的意思是哪些数据? $ sku没有被设置在某些客户端上,这表明除了数据 –

0

benmarks写正确的答案。

对不起offtop,但下面的代码:

echo json_encode($fullItem); 

是不妥当的。你应该在标题中设置json内容类型并在响应正文中设置json正文:

/** @var $helper Mage_Core_Helper_Data */ 
$helper = Mage::helper('core'); 
$this->getResponse()->setHeader('Content-type', 'application/json') 
$this->getResponse()->setBody($helper->jsonEncode($fullItem); 
+0

之外的其他东西,谢谢,出于兴趣这是否提供了任何性能改进? –

+0

我认为不行,但在控制器的方法中使用'echo'是一种错误的逻辑。您应该将body设置为响应对象。 –