【问题标题】:Codeigniter jQuery problemCodeigniter jQuery问题
【发布时间】:2011-08-23 14:38:35
【问题描述】:

我正在使用 codeigniter 构建一个应用程序,我想使用 jQuery 发布一些数据,但由于某种原因它不起作用。这是代码我做错了什么?

$.ajax({
    url: "<?=site_url('requests/save')?>",
    type: "POST",
    data: data,
    success:function(msg){
        alert(msg)
    }
});

我还没有在控制器中编写任何代码,只是简单的测试一下。也只要关注 javascript 就可以了。当用户单击按钮时触发 ajax。

function save()
{
    if($this->input->is_ajax_request()) {
        echo 'ajax';
    }
    else
    {
        echo'sdfs';
    }

}

【问题讨论】:

  • 这个 JS 在你的 HTML 中的输出是什么?您正在发布预先输出的代码,这意味着您甚至不知道路径是否正确显示。
  • JS代码运行了吗?控制台中是否有任何 JavaScript 错误?您是否看到来自浏览器的传出网络请求?如果是这样,CI 是否运行任何代码?流程的哪一部分“不起作用”?
  • 它没有输出任何东西,帖子也没有发生。 XMLHttpRequest 无法加载 7indigo.gr/ci/index.php/requests/save。 Access-Control-Allow-Origin 不允许 Origin 7indigo.gr。这是我得到的错误。
  • 你把这段代码放在哪里?这是你的观点之一吗?从所有相关文件中查看代码会有所帮助。
  • @Andre,他不需要 XSS,site_url('here/there'); 他的路径很好。我怀疑它要么是助手问题,要么是控制器问题(但我在这里做出假设,没有所有细节)

标签: php jquery codeigniter


【解决方案1】:

但丁,

首先确保你加载了你的助手:

$this-&gt;load-&gt;helper('url');

还为我们发布 JAVASCRIPT,而不是 PHP。失败的是 Javascript,而不是 CI PHP。您的 'requests/save' 的控制器上也可能存在 PHP 问题,您检查了吗?

【讨论】:

    【解决方案2】:

    我相信您需要传递一个跨站点请求伪造令牌。

    如果您在配置中将 XSS 设置为 true,那么您的表单助手会创建一个隐藏字段,需要将其传递给您的服务器。

    确保您正确收集表单数据。最容易使用 jquery 的 .serialize() 函数。

    在 autoload.php 中加载 url 助手。您在 ajax 调用中的 url 应该只是“请求/保存”。

    php 速记 echo 标签也是一个不好的做法,坚持

    <?php echo ?> 
    

    为了更好的代码可移植性

    将我的评论移至答案

    【讨论】:

    • 它应该 &lt;?php echo 'something' ?&gt; 没有空格,但是这可能是个问题,因为 &lt;?= 'something' ?&gt; 在 PHP 4.xx 中不起作用(或至少有问题)
    【解决方案3】:

    编辑:要测试 ajax,请使用相对 url,而不是在 js 中使用 php 标记内联到控制器,无论您是否已经从 url 中删除了 index.php(使用 htaccess) 或不通过在您的 url 中包含 index.php。

    $.post('/index.php/request/save', { foo: 'bar' }, function (html) { 
       alert(html);
    }); 
    

    在目标控制器上

    function save()
    {
       if($this->input->is_ajax_request()) 
       {
           echo $this->input->post('foo') ? $this->input->post('foo') : 'Not Bar';
       }
       else
       {
           echo'Not from AJAX';
       }
    
    }
    

    编辑: 还要确保在使用它的功能之前已经加载了 url 帮助器

    $this->load->helper('url');
    

    【讨论】:

    • 这不会有什么不同。原始问题代码和这个答案会导致同样的事情发生。
    • 这和他所做的没有什么不同,他显然做错了什么,或者输出的东西与他的目标网址无关
    • 在PHP4.x中&lt;?=site_url('requests/save')?&gt;有一些问题,所以把url作为变量分开是为了保证他指向正确的url(可以更容易调试)。
    • @toopay,您将 Javascript 与 PHP 混淆了,没有这样的问题,因为 PHP 从不与 JS 代码交互,它只是提供输出。他不应该使用以&lt;?=开头的短标签
    • 我不会关心标签,如果他没有在他的脚本中使用 php 内联。看他的代码。他尝试从 php 标签声明一个 js 变量,我怀疑 &lt;?=site_url('requests/save')?&gt; 没有给他正确的 url,这就是他的 ajax 失败的原因。因为如果 url 是正确的,无论它来自目标控制器的任何结果,它都应该回显/警告出来。 ajax 失败(我怀疑),因为 url 没有指向有效的 url。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多