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

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,提问作者Дима Закуткин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 02:54:31