PHP和jquery,帮助将PHP变量传递给javascript

时间:2010-01-11 10:21:50

标签: php javascript jquery ajax codeigniter

我试图允许我网站的用户上传图片,然后选择一个作为背面图片,上传工作正常,但我的控制器或视图中有问题我想,我会很感激一些可以帮助我,

查看:

<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 to = red.png,那么除了red.png之外我无法获取任何内容。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我认为你应该保持单独的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 + ")"});
    });
});