Ajax调用PHP接口回调异常:无法获取乘积校验返回结果
解决AJAX JSONP回调无法获取返回数据的问题
看起来你遇到的核心问题是JSONP不支持POST请求,再加上后端返回格式可能没符合JSONP的要求,导致success回调里拿不到数据。咱们一步步来排查和解决:
1. 移除POST请求设置,改用GET
JSONP的实现原理是通过动态创建<script>标签加载跨域资源,而script标签只能发起GET请求,你设置的type: "POST"会被jQuery自动忽略,这会导致后端接收参数或返回数据的流程出错。修改你的AJAX代码:
function call(){ console.log(fun); $.ajax({ url: "http://localhost/mt2/checkanswer.php", dataType: "jsonp", // 删掉type: "POST",JSONP默认使用GET请求 data: { num1:2, num2:2, answer:5 }, success: function( data1 ) { console.log(data1); $( "#timeDiv" ).html(data1); // 示例:将返回数据渲染到页面 } }) }
2. 确保后端返回正确的JSONP格式
JSONP要求返回的不是纯JSON字符串,而是回调函数包裹的数据。jQuery发起JSONP请求时,会自动在URL里添加一个callback参数(比如callback=jQuery112407653456789012345_1699999999999),你的后端需要读取这个参数,然后把返回数据放在该函数调用里返回。
举个PHP后端的示例(checkanswer.php):
<?php // 获取前端自动传递的callback参数 $callback = isset($_GET['callback']) ? $_GET['callback'] : ''; // 处理业务逻辑:校验乘积是否正确 $num1 = $_GET['num1']; $num2 = $_GET['num2']; $answer = $_GET['answer']; $result = array( 'isCorrect' => ($num1 * $num2 == $answer), 'message' => $num1 * $num2 == $answer ? '答案正确' : '答案错误' ); // 用callback包裹数据,返回标准JSONP格式内容 echo $callback . '(' . json_encode($result) . ')'; ?>
3. 额外排查小技巧
- 打开浏览器控制台的网络面板,查看JSONP请求的响应内容:如果返回的是纯JSON(比如
{"isCorrect":false,"message":"答案错误"}),那就是后端没处理callback参数,必须改成函数包裹的形式。 - 确认后端允许GET请求:如果你的PHP脚本限制了只能POST访问,也要同步修改后端的请求方式校验逻辑。
调整完成后,你的success回调里应该就能正确拿到data1的数据了。
内容的提问来源于stack exchange,提问作者Manjinder Grewal
相关产品推荐
相关产品推荐

