【问题标题】:jQuery .post method returns empty response from same domainjQuery .post 方法从同一域返回空响应
【发布时间】:2014-06-27 06:36:53
【问题描述】:

我正在尝试在 CodeIgniter 中使用 jQuery .post 方法;即使我向同一个域发送请求并且不应该存在跨域问题,我得到的响应也是空的。这是我的代码:

$('#send-transaction').click(function(){
    $.post('/authorized/test1',function(data){alert(data);});
});

授权控制器的函数test1()如下所示:

function test1() {echo "test";}

如何让它返回函数的输出(在本例中为字符串“test”)?

更新

原因在于无效的控制器;将讨论转移到另一个问题:

Codeigniter controller not returning requested function

【问题讨论】:

  • 浏览器控制台发生了什么?
  • 您没有看到对 /authorized/test1 的任何请求?如果没有,那是你需要开始的地方,因为你没有发送任何东西。
  • 我的意思是,我可以看到请求和响应以及一切照常(没有错误),只有响应是空白而不是字符串。
  • 它甚至会按预期触发弹出警报,但其中没有数据。这很奇怪。
  • 如果响应为空白,则警报将为空白。

标签: php jquery codeigniter


【解决方案1】:

Codeigniter 包括针对跨站请求伪造 (CSRF) 攻击的保护。这意味着任何非 GET 请求都需要包含一个特殊的令牌来告诉服务器它们是合法的。

这是一个 SO 问题,显示 how to get that token 而无需在页面上呈现表单,here's one with a bunch of answers 显示如何将其与 ajax 请求集成。

【讨论】:

  • 我在视图文件中包含了以下代码行,从那里我发出 jQuery .post 请求: $this->security->get_csrf_hash(); $this->security->get_csrf_token_name();我仍然得到相同的结果 - 空响应。我是否需要以某种方式将令牌值合并到我的发布请求中?
  • 我将代码包含在我提出请求的视图文件中。我仍然得到相同的结果 - 空响应。我是否需要以某种方式将令牌值合并到请求中?
  • 是的,您需要将其包含在请求中。我添加了一个指向另一个 SO 问题的链接,该问题显示了很多方法。
  • 好的,现在我的代码如下所示:var tokenname = '<?php echo $this->security->get_csrf_token_name(); ?>'; var tokenvalue = '<?php echo $this->security->get_csrf_hash(); ?>'; $.post('/authorized/test1',{tokenname:tokenvalue},function(data){ alert(data);}) 仍然得到相同的结果:请求状态 200 OK,响应为空白。
【解决方案2】:

修改PHP代码如下:

function test1() {echo "test"; exit;}

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多