2011-12-09 21 views
0

私はmagentoサイトで作業しています。そこには、ajaxを使用してカートに商品をロードできるセクションがあります。これは正常に動作しますが、一度に1つの要求だけを処理できます。データベースに投稿している間は、別の製品を選択することはできません。そうしないと、その最初のリクエストが削除されます。私の質問は、他のものを取り消さずに複数のリクエストを同時に実行させる方法(または可能でしょうか)です。複数のajaxリクエストが非同期で実行されています

public function addAjaxAction() 
{ 
    $response = array(); 
    $error  = false; 
    $cart  = $this->_getCart(); 
    $params  = $this->getRequest()->getParams(); 
    if (isset($params['simple_sku']) && $params['simple_sku'] != '') 
     $product = Mage::getModel('catalog/product')->load(Mage::getSingleton('catalog/product')->getIdBySku($params['simple_sku'])); 
    else 
     $product = $this->_initProductInStock(); 
    $related = $this->getRequest()->getParam('related_product'); 

    if (!$product) { 
     $error = 'Can not add item to shopping cart'; 
    }else{ 
     try { 
      $cart->addProduct($product, $params);        
      if (!empty($related)) { 
       $cart->addProductsByIds(explode(',', $related)); 
      } 
      $cart->save(); 
      $this->_getSession()->setCartWasUpdated(true); 
      Mage::dispatchEvent('checkout_cart_add_product_complete', array('product'=>$product, 'request'=>$this->getRequest())); 
      $response['status'] = 'success'; 
      $response['cart'] = $this->getLayout()->createBlock('checkout/cart_minicart') 
       ->setTemplate('page/html/modals/added_to_bag.phtml') 
       ->setChild(
        'breads'     ,$this->getLayout()->createBlock('modcheckout/cart_breadcrumbs')->setTemplate('page/html/modals/mini_crumb.phtml') 
       ) 
       ->toHtml(); 
       $response['cartStatus'] = $this->getLayout()->createBlock('core/template')->setTemplate('checkout/cart/status.phtml')->toHtml(); 
       $response['checkoutNow'] = $this->getLayout()->createBlock('core/template')->setTemplate('checkout/cart/checkoutnow.phtml')->toHtml(); 
     } 
     catch (Exception $e) { 
      $error = 'Can not add item to shopping cart'; 
     } 
    } 
    if($error){ 
     $response['status'] = 'error'; 
     $response['message'] = $error; /*= $this->getLayout()->createBlock('modcore/messages') 
      ->addMessage(new Mage_Core_Model_Message_Error($error)) 
      ->getGroupedHtml();*/ 
    } 
    echo Zend_Json::encode($response); 
} 

と応答を処理しJS:POSTを扱うアクションがある

function addQuickviewAjax() { 
    if(productForm.validate()){ 
     if(Product<?php echo $_product->getId() ?>.validate()) {       
      var params = 'product='+Product<?php echo $_product->getId() ?>.productId+'&qty='+Product<?php echo $_product->getId() ?>.currentQty+'&super_attribute[76]='+Product<?php echo $_product->getId() ?>.currentColor+'&super_attribute[491]='+Product<?php echo $_product->getId() ?>.currentSize; 
      new Ajax.Request('/modcheckout/cart/addAjax', { 
      parameters: params, 
       onFailure: reportError, 
       onSuccess: function(transport) { 
        var json = transport.responseText.evalJSON(); 
        if(json.status == 'error'){ 
         alert (json.message);  
        } else if(json.status == 'success') {      
         alert ('success'); 
        } 
       } 
      }); 
     } else { 
      return false; 
     } 
    } 
    return false; 
} 

は、誰も私にこのすべてのビットを啓発し、私は複数持っている可能性がどのように/場合を教えてもらえますそのアクションを使ったPOST?

+0

リンクのおかげでありがたいですが、廃止されたメソッドである.live()を使用するようアドバイスしましたが、このプロジェクトのjqueryの贅沢はありません。 。 – Zac

答えて

0

ブラウザは同時リクエストの数を制限する傾向があるため、複数のリクエストを送信しないで、複数の製品追加アクションに1つのXHRを送信してください。より良い考え方はMage_Checkout_CartController::addgroupAction()をご覧ください。

関連する問題