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

Typo3 v10中的Ajax请求:通过typeNum调用控制器操作

吴炎彬
2023-03-14

我试图通过Javascript/Ajax调用Extbase控制器操作。版本是Typo3 v10。控制器操作应该返回JSON。

我已创建控制器和操作,如下所示:

namespace Thevendor\Theextension\Controller;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Http\Response;

class ExampleController
{
   /** @var ResponseFactoryInterface */
   private $responseFactory;

   public function __construct(ResponseFactoryInterface $responseFactory)
   {
      $this->responseFactory = $responseFactory;
   }
  
    public function doSomethingAction(ServerRequestInterface $request): Response
    {       
       error_log("controller action got called!");
       $data = ['result' => 42];
       $response = $this->responseFactory->createResponse()
          ->withHeader('Content-Type', 'application/json; charset=utf-8');
       $response->getBody()->write(json_encode($data));
       return $response;    
    }
}

接下来,我在ext_localconf.php注册了一个插件:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
            'Thevendor.Theextension',
            'Testing',
            [
                \Thevendor\Theextension\Controller\ExampleController::class => 'doSomething',               
            ],
            // non-cacheable actions
            [
                \Thevendor\Theextension\Controller\ExampleController::class => 'doSomething',
            ]
        );

接下来,我创建了一个文件/theextension/Configuration/Typoscript/setup。如下所示的打字脚本:

example_page = PAGE
example_page {
    typeNum = 776776

    config {
        disableAllHeaderCode = 1
        additionalHeaders = Content-type:application/json
        xhtml_cleaning = 0
        debug = 0
        no_cache = 1
        admPanel = 0
    }
    10 < plugin.theextension_testing        
}

我正在通过访问浏览器和邮递员中的以下网址进行测试:

/家?无缓存=1

响应为200 OK且为空。未调用控制器操作中的“错误日志”行。如果我将打字稿的最后一行更改为:

10 = TEXT
10.value = ExampleText

我确实收到了返回的“ExampleText”。所以打字脚本定义、typeNUM和上面的URL都在工作,但我无法让它调用控制器操作。我也试过:10

有人能帮我指出正确的方向吗?我真的很感谢你的帮助。

共有1个答案

祁雪峰
2023-03-14

尝试将pluginName、extensionName和vendorName也添加到打字稿代码中。应该是这样的:

ajaxSearch_page = PAGE
ajaxSearch_page {
    typeNum = 776776
    10 = USER
    10.userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    10.extensionName= ExtensionName
    10.pluginName = PluginName
    10.vendorName = Vendor

   config {
      disableAllHeaderCode = 1
      additionalHeaders = Content-type:application/json
      xhtml_cleaning = 0
      debug = 0
      no_cache = 1
      admPanel = 0
   }
}

也许这个答案能让你如愿以偿

https://stackoverflow.com/a/61637195/7162477

 类似资料:
  • 问题内容: 我发送这样的短信 html标记 JavaScript代码 symfony2控制器代码 但为空… 我已经尝试通过Firefox HTTP请求测试器进行普通的发布请求(不是Ajax)。 控制器工作并具有价值。 所以我认为php代码还可以,但是Ajax方面存在问题 成功地调用’success:function’。 您如何获取javascript数据结构的内容? 问题答案: 首先,您无需访问控

  • 问题内容: 我正在将数据从javascript应用程序发送到MVC5控制器,但是,当数据提交到Submit controller操作时,它永远不会被调用。我有一些非常简单的映射器,它们创建以下JSON对象: 然后,我使用以下代码发送数据: 我的控制器代码如下: 我有以下问题: 但是,从不会调用Submit,但是,如果我注释掉了控制器参数,那么它将被调用,这是为什么呢? 从上面看来,控制器框架似乎无

  • 问题内容: 我在Ubuntu16.04上将Symfony3与PhpStorm.2016.3.2一起使用 我之前从未做过AJAX请求,并且想测试从view->到controller->的控制器调用,该调用将答案发送回JSON中的视图。 所以我读了文档,但它们都很具体。因此,我的愿望是只能在视图中编写一个简单的AJAX请求,以便对其进行测试,调用控制器并在视图中返回答案。 这是我的看法: 我的控制器:

  • 问题内容: 我正在开发一个使用大量ajax的grails应用程序。如果请求是ajax调用,那么它应该给出响应(这部分正在工作),但是如果我在浏览器中输入URL,它应该带我到主页/索引页面而不是请求的页面。下面是Ajax调用的示例gsp代码。 如果我们在浏览器URL栏中键入http:// localhost:8080 / Dash / todo / list ,则控制器应重定向到http:// lo

  • 问题内容: 如何通过 HTTPS* 发送ajax GET 请求? * 抛出这个: 是否有其他方法或解决方法可以使此工作正常进行? 如果我使用 Chrome 浏览到该网址,则可以得到响应。我认为没有理由为什么它不能在ajax请求上正常工作。 问题答案: 如果您由于当前处于 同一来源策略 而无法访问该页面,则无法向该页面发出AJAX请求。 **** 的 主机 , 端口 和 方案 (协议)必须在为了使A

  • 我已经找了5个小时左右,但我放弃了。我的ajax get请求不起作用。 它连接到标准的C#mvc api,但我得到的只是这个错误: 无法加载XMLHttpRequesthttp://localhost:18428/api/Reservation/1?weekNumber=1. 对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。起源'http://localhost因