0

嗨,我试图在 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,我在哪里错过了重点?

4

1 回答 1

1

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

如果这是不可能的,那么在你的成功回调函数中创建document.createDocumentFragment(),将整个响应传递到片段中,然后用类似的东西拉出你需要的东西myHTML = docFrag.getElementsByTagName('div')[0],然后将它与 append 一起传递到你的表单中。

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

顺便说一句:如果您不使用在字符串中解析变量的便利,您可能希望使用不同的方式(其他引号)来编写字符串,因为这样会更快,所以:

echo '<tr class="tdata">...'
于 2013-09-14T10:34:01.040 回答