【问题标题】:jQuery GET Not WorkingjQuery GET 不工作
【发布时间】:2010-08-23 02:49:12
【问题描述】:

作为序言,让我说我是 .. jQuery 的“新手”。我有downpat的概念和大部分用法,但我对所有这些括号和功能还不够完美。

因此,我可能在这里犯了一个业余错误。我正在使用以下代码提交一些数据,移动到页面的下一部分,然后尝试将新内容加载到下一部分的下拉菜单中:

    $('#submit').click(function() {

    var nam = $('#name').val();
    var par = $("#parentCategory").val();
    var dat = $("#catDate").val();

    $.post("<?php echo site_url('admin/add_gallery'); ?>", {name: nam, parent: par, cat_date: dat}, function() {
        if (par != 'undefined')
        {
            $('#next_tab').click()
        }
        else
        {
            $("#gallery").click(),
            $("#name").val('')
        }
    });

    $.get("http://www.example.com/admin/get_galleries", function(gals)
    { // Get the Contents of Drop Down Gallery Select
        $("#galleryChoose").html(gals);
    }); 

    alert('yop');       

});

不幸的是,它不起作用。 POST 效果很好,但 #galleryChoose(这是一个

标签)永远不会被新内容填充。

我使用 GET 调用的 URL(通常是指向我的测试站点的 URL,我出于示例目的更改了它)会生成一个包含所有最新元素的下拉列表,但使用 GET 引用它似乎不起作用。我是否必须以某种特定方式将其退回以获取 GET?我现在只是在使用return $variable,其中 $variable 包含所有 HTML。

任何帮助将不胜感激。为这个问题苦苦挣扎了一夜。

更新:这是我在 URL 中引用的代码(它是 CodeIgniter,所以它在我的控制器中):

    function get_galleries()
{
    $galleries = $this->find->all_items('galleries');
    $return = '<label>Choose the Gallery:</label> <br />';
    $return .= '<select id="galleryParent" name="galleryParent">';
    foreach ($galleries as $gals)
    {
        $return .= '<option id="'.$gals->gal_name.'" value="'.$gals->gal_id.'">'.$gals->gal_name.'</option>';
    }
    $return .= '</select>';   

    echo $return;     
}

【问题讨论】:

  • 不确定它是否能解决您的问题,但您遇到了一些行尾问题。 $("gallery").click(), 应该以分号结尾,而不是逗号。您还有另外两个未终止的语句。使用 JavaScript 臭名昭著的隐式分号,您应该始终自己添加所有分号,而不是将决定权留给 JS 解释器。

标签: jquery codeigniter get


【解决方案1】:

我猜你想要做的是通过$.post 更新一些数据,然后使用 get?在这种情况下,您会遇到问题,因为 $.post$.get 是异步的,这意味着浏览器在继续执行脚本之前不会等待它完成。

这意味着您的脚本将几乎同时调用$.post$.get,而是尝试将您的get 放在$.post 的回调中,如下所示:

$('#submit').click(function() {

    var nam = $('#name').val();
    var par = $("#parentCategory").val();
    var dat = $("#catDate").val();

    $.post("<?php echo site_url('admin/add_gallery'); ?>", {name: nam, parent: par, cat_date: dat}, function() {
        if (par != 'undefined')
        {
            $('#next_tab').click()
        }
        else
        {
            $("#gallery").click(),
            $("#name").val('')
        }
        $.get("http://www.example.com/admin/get_galleries", function(gals)
        { // Get the Contents of Drop Down Gallery Select
            $("#galleryChoose").html(gals);
        }); 
    });



    alert('yop');       

});

【讨论】:

  • 我想就是这样。我应该看到的。 +1
  • 我一定会调查此事,因为这是有道理的。我相信我确实尝试过,但是它只是让事情闪烁并且看起来页面正在重新加载,但没有工作。我会仔细检查并尝试正确实施。
  • 您还应该检查 Firebug (getfirebug.com),看看您从 example.com/admin/get_galleries 获得的输出是否是您期望的输出。 (或者,你知道的,直接去地址)
  • 正如我在 D Hoerster 的回答中所指出的,我广泛使用 Firebug 并检查了 URL,它发回的 HTML 正是我想要的。
  • 没用,但我相信你是对的。将完全不必要的 GET 替换为更简单的 LOAD 命令。
【解决方案2】:

我不是 PHP 专家,但删除目录字符串 (/admin/get_galleries) 中的前导 / 是否可以解决问题?你应该追加admin/get_galleries,因为你的链接变量已经有尾随/

【讨论】:

  • 很遗憾没有。我为此更新了代码。在我的实际情况下,我没有使用链接变量,我只是传入了完整的 URL。
  • GET 是否与它所在的页面所在的域相同?我假设它是,但我想我会问。
  • 另外,如果您将$("#gallery...").html(gals) 调用替换为alert(gals),您会得到什么?您是否使用 Fiddler 或 Firebug 监控过调用——服务器返回的任何内容?
  • a) 服务器相同,因此相同域策略不适用。 b)我尝试过提醒它,但我绝对没有得到任何回报。我使用了 firebug,甚至尝试 console.log 数据,但我从未得到响应。
  • 您知道它正在服务器端进行处理 - 调试/跟踪/输出到文本文件/等吗?很抱歉有明显的问题。
【解决方案3】:

CodeIgniter 默认禁用 $_GET。您必须启用它才能使用它。看这里:CodeIgniter User Guide, Security

【讨论】:

  • 是的,但它在我网站的另一个部分工作得非常好,在那里我使用几乎相同的语法获取购物车内容。
  • 也许你使用了错误的路线。确保您使用的是 = site_url('controller/method'); ?> 根据您的要求。我认为问题是由jQuery引起的,它不能进行跨域调用(即使在'localhost'和'127.0.0.1'之间)。如果你想这样做,你需要使用 JSON。希望它有帮助..我有类似的问题。
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 2012-02-23
  • 1970-01-01
  • 2015-06-03
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多