跨域调用Javascript POST请求PHP本地正常,外部调用失败求助
解决跨域请求无法获取PHP数据的问题
这是新手做跨域接口开发时非常常见的坑!你碰到的是浏览器同源策略的限制问题——简单来说,浏览器为了安全,默认不允许不同域名(甚至不同端口、协议)的JavaScript向另一个域名发起请求,这就是同域名用相对路径能正常工作,但其他网站用完整URL调用就拿不到数据的原因。
快速解决:给PHP添加CORS响应头
这是最直接的方案,只需要在你的phpcode.php最顶部添加几行代码,授权跨域请求:
<?php // 允许所有域名跨域访问(开发阶段推荐,生产环境建议指定具体域名) header("Access-Control-Allow-Origin: *"); // 如果需要让请求携带Cookie等凭证,可添加这行(可选) // header("Access-Control-Allow-Credentials: true"); $val = 'apple'; echo json_encode($val); ?>
如果是生产环境,为了安全不要用*,换成你需要允许访问的具体域名,比如:
header("Access-Control-Allow-Origin: http://your-other-site.com");
额外排查步骤(加了头还是不行的话)
给JS请求加错误处理
可以在jQuery请求里加上失败回调,方便在浏览器控制台查看具体错误:$.post( "http://website.com/phpcode.php",function(data){ alert(data); }, "json") .fail(function(jqXHR, textStatus, errorThrown) { console.log("请求失败原因: " + textStatus); console.log("服务器返回内容: " + jqXHR.responseText); });打开浏览器开发者工具(F12)切换到Console标签,就能看到具体的错误信息。
检查Godaddy主机安全设置
Godaddy部分主机默认开启了ModSecurity安全规则,可能会拦截跨域请求:- 登录主机控制面板,找到ModSecurity选项暂时关闭后测试
- 检查网站根目录的
.htaccess文件,确认没有添加限制跨域的规则
原理补充
这种跨域限制叫做CORS(跨域资源共享),只有当服务器明确返回Access-Control-Allow-Origin这类响应头时,浏览器才会允许前端获取接口返回的数据。同域名下的请求因为符合同源策略,所以不会触发这个限制。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

