当前位置:首页 > PHP教程 > php应用 > 列表

如何解决 PHP Ajax 请求在某台服务器上失败的问题

发布:smiling 来源: PHP粉丝网  添加日期:2026-07-11 17:04:50 浏览: 评论:0 

本文详解因混合内容(http 资源加载于 https 页面)导致 jquery 未加载、ajax 请求静默失败的典型问题,并提供快速诊断与修复方案。

在将基于 jQuery 的 Ajax 脚本从一台服务器迁移至另一台时,出现“控制台仅输出 show box,无 good result,也无报错”的现象,是典型的前端资源加载失败但未显式抛错的静默故障。根本原因往往不在 PHP 或 Ajax 逻辑本身,而在于页面协议与外部资源协议不匹配。

你提供的代码中关键一行存在严重安全隐患:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

该链接使用的是 http:// 协议。当你的网页通过 HTTPS 访问时(现代浏览器默认强制 HTTPS 或站点已配置 SSL),浏览器会因「混合内容(Mixed Content)」策略自动阻止 HTTP 资源加载——jQuery 文件根本未执行,后续所有 $.post() 调用自然无法运行,且 Chrome/Firefox 等现代浏览器通常仅在控制台发出警告(如 Blocked loading mixed active content "http://..."),而非抛出 JavaScript 错误,导致 ShowThePopout() 函数中的 $.post 实际从未执行,因此 console.log('good result') 永远不会触发。

✅ 正确做法:统一使用协议相对 URL 或强制 HTTPS

  1. <!-- 推荐:协议相对 URL(自动适配当前页面协议) --> 
  2. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
  3.  
  4. <!-- 或更推荐:显式 HTTPS(语义清晰、兼容性好) --> 
  5. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

同时建议升级 jQuery 版本(1.9.1 已停止维护且存在安全风险),例如使用 CDNJS 或 jsDelivr 提供的较新稳定版:

<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>

? 诊断技巧:

在 Chrome 中按 F12 → 切换到 Console 标签,刷新页面,查看是否有 Mixed Content 警告;

切换到 Network 标签,筛选 jquery,确认其状态码是否为 (blocked:mixed-content);

在 Firefox 中需手动启用 about:config → security.mixed_content.block_active_content = true(默认开启)才能复现并定位该问题。

? 补充提醒:

即使 CORS 已启用,也无法绕过混合内容拦截——这是浏览器在资源加载阶段的底层安全策略,早于 Ajax 请求发起;

sidebox_ajax_test.php 无需任何修改(<?php echo 'done'; ?> 完全正确),问题纯属前端依赖缺失;

生产环境务必避免使用过期 CDN 版本,并考虑本地托管关键 JS 库以提升稳定性与安全性。

修复后,控制台将正常输出:

show box

XHR POST /sidebox_ajax_test.php

good result

Ajax 请求即可成功执行。

Tags: PHP Ajax 请求 Ajax请求服务器失败

分享到: