Cordova JS向PHP Slim API发送请求的CORS错误及移动端Ajax 0错误排查求助
Cordova JS向PHP Slim API发送请求的CORS错误及移动端Ajax 0错误排查求助
大家好,我最近碰到了两个棘手的问题,想请各位帮忙分析排查下:
一、初始的CORS困扰
我在用Cordova开发的JS应用里,向基于PHP Slim框架搭建的API发送请求时,一直触发CORS错误,而且我不太清楚该怎么正确自定义请求头。
- 因为应用要在不同设备上运行,每个设备的地址都不一样,没法固定写一个允许的Origin地址,我试着用
*来代替具体地址,但完全没效果。
以下是我的Slim API代码:
<?php require 'vendor/autoload.php'; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; $app = new \Slim\App; $app->options('/api/search/', function ($request, $response) { $response = $response->withHeader('Content-type', 'application/json'); $response = $response->withAddedHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); $response = $response->withAddedHeader('Access-Control-Allow-Methods', 'POST'); $response = $response->withAddedHeader('Access-Control-Allow-Origin', '*'); return $response; }); $app->post('/api/search', function (ServerRequestInterface $request, ResponseInterface $response) { $data = $request->getParsedBody(); $response = $response->withHeader('Content-type', 'application/json'); $response = $response->withAddedHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); $response = $response->withAddedHeader('Access-Control-Allow-Methods', 'POST'); $response = $response->withAddedHeader('Access-Control-Allow-Origin', '*'); //$response = $response->getBody()->write(json_encode($data)); return $response; });
前端发送请求的Ajax代码:
$.ajax({ url: "url_adress", type: 'POST', dataType: "application/json", data: { barcode: '123', tkn: 'token' }, beforeSend: function (xhr) { xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); }, success: function (response) { let data = JSON.parse(response); console.log(data); }, })
我试过在服务器响应头里指定具体的服务器地址,但还是解决不了问题,浏览器抛出的错误是:
Access to XMLHttpRequest at 'http://url....' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
另外我发现Chrome的网络请求里,预检用的OPTIONS请求甚至都没显示出来,目前我是在浏览器里测试请求,后续打算在手机端发送。
二、新出现的移动端Ajax 0错误
好不容易把浏览器里的请求调通了,结果现在从移动应用发送请求时,又出现了Ajax 0错误,可浏览器里一切正常,这实在搞不懂哪里出问题了。
备注:内容来源于stack exchange,提问作者Дима Закуткин
相关产品推荐
相关产品推荐

