Block5中的Concrete5自定义Ajax

时间:2017-08-25 12:20:41

标签: php ajax concrete5 concrete5-8.x

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

我找到How To Send JSON Responses with Concrete5.7并使用选项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开发工具中,我看到了正确的内容类型(作为测试,我尝试了text/html并看到了开发工具中的更改),但没有内容。有趣的是,如果我将状态从200更改为500,我不仅会看到开发工具中反映的状态更改,还会看到我期待的{"msg":"ok"}内容,但更改了状态返回200,内容再次为空。

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

0 个答案:

没有答案