当前位置: 首页 > 知识库问答 >
问题:

对symfony api的ajax请求未返回“Access Control Allow Origin”标头

越风史
2023-03-14

我正在使用React制作简单的应用程序,将ajax请求发送到使用Symfony制作的API。我正在开发反应应用程序和Symfony api。我将请求从localhost:3000发送到localhost:8000。这是我发送的ajax请求

addUser (data) {
    console.log('made it')
    let request = {
      method: 'post',
      url: 'http://127.0.0.1:8000/user/post',
      data: JSON.stringify({'username': data}),
      contentType: 'application/json'
    }
    $.ajax(request)
      .done(data => this.addUserSuccess(data))
      .fail(err => this.addUserFail(err))
  }

这是Symmfony应用程序,负责处理请求

/**
     * Creates a new user entity.
     *
     * @Route("/post", name="user_new")
     * @Method({"GET", "POST"})
     */
    function newAction(Request $request ) {
        echo $request;
        $body = $request->getContent();
        $body = json_decode($body,true);
        $username = $body['username'];
        $user = new User($username);
        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();

        return new JsonResponse($user,200,array('Access-Control-Allow-Origin'=> '*'));
    } 

我到目前为止在开始,你可以看到我正在创建没有密码,安全或任何东西的新用户。我只想让它工作,并能够发送请求从应用程序到api。结果如下

无法加载XMLHttpRequesthttp://127.0.0.1:8000/user/post. 对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问html" target="_blank">控制允许来源”标头。起源'http://localhost:3000因此,不允许访问。响应的HTTP状态代码为405。

我以前见过很多类似的问题,其中一个答案是返回带有标题的JsonResponse,正如您所看到的,它不起作用。

下面是我遵循的其中一个问题的答案-访问控制不允许使用Origin允许使用Origin,但不幸的是没有成功。

你能告诉我怎么修吗?提前谢谢你!

共有2个答案

强安和
2023-03-14

您需要在PHP文件上设置正确的标题。

 header('Access-Control-Allow-Origin: *');
常智勇
2023-03-14

以下是我为同样的情况所做的。在app/config/config_dev.yml中添加新服务。将其放入config_dev.yml意味着这只会影响通过app_dev.php发出的请求。

services:
    app.cors_listener:
        class: AppBundle\Security\CorsListener
        tags:
            - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }

以及AppBundle/Security/CorsListener.php的内容:

<?php
namespace AppBundle\Security;

use Symfony\Component\HttpKernel\Event\FilterResponseEvent;

// Based on http://stackoverflow.com/a/21720357
class CorsListener
{
    public function onKernelResponse(FilterResponseEvent $event)
    {   
        $responseHeaders = $event->getResponse()->headers;

        $responseHeaders->set('Access-Control-Allow-Headers', 'origin, content-type, accept, credentials');
        $responseHeaders->set('Access-Control-Allow-Origin', 'http://localhost:8080');
        $responseHeaders->set('Access-Control-Allow-Credentials', 'true');
        $responseHeaders->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, PATCH, OPTIONS');
    }
}
 类似资料:
  • 问题内容: 我一直在从jquery收到针对Ajax请求的“ parsererror”,我尝试将POST更改为GET,以几种不同的方式(创建类等)返回数据,但是我似乎无法弄清楚问题出在哪里。 我的项目在MVC3中,我使用的是jQuery 1.5,我有一个Dropdown,并在onchange事件上触发了一个调用,以基于所选内容获取一些数据。 下拉列表:(这会从Viewbag的列表中加载“ Views

  • 问题内容: 我有一个函数,用关键字声明一个变量。然后,它将启动AJAX请求以设置变量的值,然后从函数中返回此变量。 但是,我的实现失败了,我也不知道为什么。 这是代码的简化版本; 问题答案: AJAX请求是异步的。您的sendRuest函数正在执行,正在发出AJAX请求,但它是异步发生的;因此,sendRuest的其余部分在AJAX请求(和onreadystatechange处理程序)执行之前就已

  • 问题内容: 我想做的事情似乎很简单:通过 HTML 页面并从中提取一个值。 问题是 jQuery 拒绝解析返回的HTML。 同时,我正在玩的小提琴没有用,因此我无法提供其他可行的示例。 更新: 我的新提琴工作正常,但是似乎问题在于,在我的实际项目中,我试图解析大量复杂的HTML。这是一个已知问题吗? 问题答案: 您的代码工作正常。您只是没有正确使用jsFiddle的API。检查文档中的(http:

  • 对localhost的Ajax请求返回403错误。然而,当我更改controller requestMethod以获取并在浏览器上打开请求“url”时,它会显示从服务器返回的json数据。我希望使用这些数据填充一个下拉列表。请帮帮我。我正在使用spring security 4.0和spring MVC框架。CSRF未禁用。此外,该url在Spring得到保护。 我在这里查看了相关问题,但没有找到

  • 本文向大家介绍jquery+ajax请求且带返回值的代码,包括了jquery+ajax请求且带返回值的代码的使用技巧和注意事项,需要的朋友参考一下 现在比较流行使用jquery的ajax来实现一些无刷新请求效果,本章节提供一个非常简单的代码实例供大家参考之用,希望能够给需要的朋友带来一定的帮助,代码如下: async是asynchronous[异步]的缩写,它是一个bool值默认为true。当as

  • 我在本地服务器上找到了它失败的代码: 在我看来,它似乎不能获得或?