您好我试图在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."&action=move&qty=".$row->quantity."\" class=\"buttoncart black\"> Move To Wishlist </a><br><a href=\"/cart.php?sku=".$row->sku."&action=remove\" class=\"buttoncart black\"> Remove From Cart </a></td>";
}
echo "</tr><tr class=\"ttotals\"><td colspan=\"3\" ><strong id=\"carttotal\">TOTAL:</strong></td>
<td colspan=\"2\" > $".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,哪里错过了这一点?
答案 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">...'