【问题标题】:PHP and jquery, help passing PHP variable to javascriptPHP 和 jquery,帮助将 PHP 变量传递给 javascript
【发布时间】:2011-01-03 17:02:46
【问题描述】:

我正在尝试允许我网站的用户上传图片,然后选择一张作为背景图片,上传工作正常,但我认为我的控制器或视图有问题,我将不胜感激可以帮帮我,

查看:

<div id="background-select">
<?php
$count = 0;
    if(isset($special)) {
        foreach ($special as $row) {
            print '<div class="select">';
                print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>";
            print '</div>';

                $background = $row['background_name'];
                echo $background;

        }
    }
    if(isset($generic)) {
        foreach ($generic as $row) {    
            print '<div class="select">';
                print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>";
            print '</div>';
                $background = $row['background_name'];
                echo $background;

            }

        }

    if(isset($user_background)) {
        foreach ($user_background as $row) {
            print '<div class="select">';
                print "<a class='background_btn' href='index.php/home/set_background/".$row['background_id']."'>$count</a>";
            print '</div>';
                $background = $row['background_name'];
                echo $background;
            }

        }
?>
</div>
<script type="text/javascript">
$("a.background_btn").click(function(ev){
ev.preventDefault();
alert("hello");
var url = $(this).attr("href");
alert(url);
$.ajax ({
    url : url, 
    type: "POST",
    success : function (html) {
        alert("<?php echo $background; ?>")
        $('#wrapper').css('background', 'url(/media/uploads/backgrounds/<?php echo $background; ?>)');
    }
})
});
</script>
<div id="wrapper">

控制器:

public function set_background() {
        $this->load->model('image_model');
        if($query = $this->image_model->get_background_by_id($this->uri->segments[3])) {
            //die(var_dump($query));
            foreach ($query as $row) {
                $data['background'] = $row['background_name'];
            }
        }
        $this->load->view('template/background-select', $data);
    }

问题是我只能将背景设置为第一个返回值,例如,如果第一个循环将 $background 返回到 = red.png,那么我只能加载 red.png 之外的任何内容。

任何人都可以提出解决方案吗?

【问题讨论】:

    标签: php javascript jquery ajax codeigniter


    【解决方案1】:

    您似乎使用 AJAX 加载背景。但是,您在初始请求中设置了 $background 的值,并且 AJAX 调用的“成功”方法从不使用返回的 HTML。仅在第一次加载页面时最初设置的背景。你应该确保你的 AJAX 调用返回背景,这样你就可以在你的 javascript 中使用它。不要尝试使用 PHP 在“成功”方法中设置背景。

    另外,虽然不确定,但您的控制器似乎设置了一个属性 $data['background'],在 foreach 的每次迭代中都覆盖它,而不是创建数组或哈希图。

    【讨论】:

    • 这是正确的我正在使用 AJAX 加载背景图像,我想我遵循你的意思,但是一个代码示例真的很有帮助,因为我认为它比重命名某些变量更复杂?如果我没有在我的成功方法中设置背景,我该怎么办?以及如何?
    • 创建一个 php 页面或控制器来接收您要设置的背景的 ID,并让它只返回一个带有“red.png”或类似内容的空页面。然后,在您的成功方法中,“red.png”将成为该方法的参数,因此您可以使用它来设置背景。我对使用的 MVC 方法了解得不够多,无法给你一个完整的例子......对不起:-)
    【解决方案2】:

    我认为您应该将 PHP 和 JS 分开。完成上传过程后,您可以重定向(或使用 AJAX 动态显示)上传的图像页面。用户点击上传的图片后,只需更改背景属性可能是这样的:

    <div id="back">
        <img src="foo.jpg" alt="..." />
        <img src="bar.jpg" alt="..." />
        ...
    </div>
    
    $(function(){
        $("#back img").bind("click", function(e){
            var src = $(this).attr("src");
            $("#back").css({"background-image": "url(/images/" + src + ")"});
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多