Jquery返回所有数据我只想要表

时间:2013-09-14 10:05:37

标签: ajax jquery

您好我试图在GET请求后使用jquerys ajax更新表单,我只是想让表更新,但它也会通过页面标题发送。

首先这是我的脚本,它的小,所以我将包括所有,

var wishorder = {
    init: function(config){
        this.config = config;
        this.bindEvents();
    },
    bindEvents: function(){
        this.config.itemSelection.on('click',this.addWish);
    },
    addWish: function(e){
        console.log('working');

        var self = wishorder;
        $.ajax({
            url: $(this).attr('href'),
            type: 'GET',
            data: {
                sku: $(this).data('sku'),
                action: $(this).data('action'),
                qty: $(this).data('qty')
            },
            success: function(results){
                //here is where is would like to repopulate the div
                //but its outputting the whole page
                console.log(results);
            }
        });
        e.preventDefault();
    }


};
wishorder.init({
    itemSelection: $('#carttable a'),
    form: $('#cartfrm')
});

我可以看到它返回了我想要的结果,但它在html中将其包装在页面标题中。

这是它调用的php函数。

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_GET['action'] == 'move'){

  list($sp_type, $pid) = $this->parse_sku($_GET['sku']);
  $qty =  (filter_var($_GET['qty'], FILTER_VALIDATE_INT, array('min_range' >= 1)))?$_GET['qty']:1;
  $q = "CALL add_to_wish_list('$this->uid', '$sp_type', $pid, $qty)";
  $this->query($q);
  $q = "CALL remove_from_cart('$this->uid', '$sp_type', $pid)";
  $this->query($q);
  $q = "CALL get_shopping_cart_contents('$this->uid')";
  $this->query($q);
  $this->read();
  $this->outcart();
  exit();
}

和outcart函数将为div生成html

function outcart(){
  echo "<div id=\"cartcont\" class=\"cartitems\"><form action=\"/cart.php\" method=\"post\"><table id=\"carttable\"><tr class=\"theads\"> <th class=\"titm\" >Item</th> <th >Quantity</th> <th >Price</th> <th>Subtotal</th> <th class=\"topt\" >Options</th>";
  $total = 0;
  while($row = $this->_result->fetch_object()){
    $price = $this->get_just_price($row->price, $row->sale_price);
    $subtotal = $price * $row->quantity;
    $total += $subtotal;
    echo "<tr class=\"tdata\">
            <td>".$row->category." :: ".$row->name."</td>
            <td><input type=\"text\" name=\"quantity[".$row->sku."]\" value=\"$row->quantity\" size=\"2\">
            <td>$".$price."</td>
            <td>$".number_format($subtotal, 2)."</td> 
            <td><a href=\"/wishlist.php?sku=".$row->sku."&amp;action=move&amp;qty=".$row->quantity."\" class=\"buttoncart black\">&nbsp;&nbsp; Move To Wishlist &nbsp;&nbsp;</a><br><a href=\"/cart.php?sku=".$row->sku."&amp;action=remove\" class=\"buttoncart black\">&nbsp;Remove From Cart &nbsp;</a></td>";
  }

  echo "</tr><tr class=\"ttotals\"><td colspan=\"3\" ><strong id=\"carttotal\">TOTAL:</strong></td>
                <td colspan=\"2\" >&nbsp;&nbsp; $".number_format($total,2) ." </td>
                </tr>";
  echo "</table>";

  echo "<div id=\"cartmnbtns\"><p><input type=\"submit\" value=\"UPDATE QUANTITIES\" class=\"buttoncart1 green\"><br><a href=\"https://".BASE_URL."/checkout.php?session=".$this->uid."\" class=\"buttoncart1 green \">Checkout</a></p> </div></form>";
}

所以我只想真正重新填充表格或者将结果重新加入cartcont div,哪里错过了这一点?

1 个答案:

答案 0 :(得分:1)

您正在调用的页面是url: $(this).attr('href'),这是一个您正在使用所有标题和内容的网页...您必须将您的函数放在一个单独的.php文件中包含整个网页框架,只输出您想要的文本。

如果那是不可能的,那么使用document.createDocumentFragment()在你的成功回调函数中创建,在片段中传递整个响应并用myHTML = docFrag.getElementsByTagName('div')[0]之类的东西提取你需要的东西,然后通过追加传递给它你的表格。

您可能还想在ajax调用中设置类似contentType: "text/plain; charset=utf-8"的内容。

顺便说一句:如果你没有使用在字符串中解析变量的便利,你可能想要使用不同的方式(其他引号)来编写字符串,因为它更快,所以:

echo '<tr class="tdata">...'