You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用AJAX后页面布局未更新的技术求助

嘿,我一眼就瞅到问题出在哪了——AJAX请求确实发出去了,但你没处理返回的内容,服务器也没把更新后的HTML送回来,页面当然纹丝不动啦!咱们一步步来改:

核心问题拆解

  • AJAX没处理响应:你的onreadystatechange是空函数,相当于喊了外卖但没人开门接,请求成功后完全没把服务器返回的内容更新到页面上。
  • PHP没输出内容:最后你给$val赋值了新的HTML,但没把它echo出去,服务器等于没给AJAX任何可以用来更新页面的素材。
  • 页面没固定更新容器:HTML里没有明确的元素用来承载配送成本的内容,AJAX不知道该把新内容替换到哪里。

修改后的代码示例

1. JavaScript(处理AJAX响应)

var htpr = new XMLHttpRequest();
var url = "cart.php";
var val = "extra=" + id;
htpr.open("POST", url, true);
htpr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
htpr.onreadystatechange = function () {
    // 当请求完成且成功时
    if (htpr.readyState === 4 && htpr.status === 200) {
        // 把返回的HTML替换到页面的指定容器里
        document.getElementById('delivery-container').innerHTML = htpr.responseText;
    }
};
htpr.send(val);

2. PHP(输出更新后的HTML)

$delTotal = $delTotal + $extra_delivery_price;
if(isset($_POST["extra"])){
    // 这个test可以留着调试,正式上线建议删掉
    echo "test";
    $val = $_POST["extra"];
    if($val === "Europe"){
        $delTotal = $delTotal + 5;
    }else if($val === "Zone1"){
        $delTotal = $delTotal + 11;
    }else if($val === "Zone2"){
        $delTotal = $delTotal + 25;
    }
}
// 直接写HTML标签就行,不用转义<>
$val = '<input type="hidden" name="shipping_1" id="shipping_1" value="'.$delTotal.'"> <p1>Delivery cost: £'.$delTotal.'</p1><br>';
// 关键!把生成的HTML输出给AJAX
echo $val;

3. HTML(添加更新容器)

<!-- 新增一个容器,AJAX会替换这里的内容 -->
<div id="delivery-container">
    <?php echo $val;?>
</div>

这样改完之后,AJAX请求成功就会把PHP返回的新配送成本HTML替换到页面的delivery-container里,页面布局自然就跟着更新啦!

内容的提问来源于stack exchange,提问作者user8782879

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:24