1

在 Concrete5-8.1.0 上,我创建了一个具有 Ajax 功能的自定义块,主要基于 concrete5 文档 -在块视图模板中实现 Ajax。但是,与我不想重新加载块视图的示例不同,我想根据输入传递特定的消息。我尝试了一个简单的echo '{"msg":"ok"}';return '{"msg":"ok"});作为测试,但对该函数的请求产生了一个空响应。

我找到了如何使用 Concrete5.7 发送 JSON 响应并使用选项 2(为了更好地控制错误代码)导致以下测试代码:

public function action_submit($token = false, $bID = false) {

  if ($this->bID != $bID) {
    return false;
  }
  if (Core::make('token')->validate('get_paper', $token)) {

    //save to database
    //removed for brevity

    //send email
    if ($this->emailto != '') {
      //removed for brevity
    }

    if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
      return new Response(
        json_encode(array('msg' => 'ok')),
        200,
        ['Content-Type' => 'application/json']
      );
    } else {
      Redirect::page($page)->send();
    }
  }
  else {
    return false;
  }
  exit;
}

数据库保存和电子邮件功能正常,但响应仍然为空。在 Chrome 开发工具中,我看到了正确的 Content-Type(作为测试,我尝试text/html在开发工具中看到了这种变化),但没有内容。有趣的是,如果我将状态从更改为200500我不仅会在开发工具中看到状态更改,还会看到{"msg":"ok"}我期望的内容,但将状态更改回,200内容又是空的。

似乎我遗漏了一些简单的东西......我已经验证了 C5 中的所有缓存都已关闭(站点仍在开发中),我还验证了 jQuery 请求包括cache:false,但解决方案让我无法理解。

4

0 回答 0