Ajax和PHP交互的小困难

Minor difficulties with Ajax and PHP interaction

本文关键字:交互 PHP Ajax      更新时间:2023-09-26

我在CodeIgniter工作,我试图吐出我在一个表中所有的项目,并订购他们,因为他们应该使用下拉菜单。我希望它发生在没有页面重载和没有提交按钮,所以我使用这个jQuery函数做出立即反应,当它被改变:

$(document).ready(function() {
    $(".order-by-select").click(function() {var orderValue = this.value;
    $.post("<?php echo base_url() ?>welcome/index", {val: orderValue}, function(data) {
        alert(data);
    });
});

里面可以看到$。post方法,我试图将数据发送到php脚本(orderValue)。之后,我得到一个警报(甚至不确定,为什么我需要它(也许检查是否一切正常))

在PHP中,我正在接收选择的选择选项,并将变量($data['people'])分配给MySQL查询的结果(即放置在模型中),以便能够在视图中访问它。这个- $_POST['val']表示,我如何排序列表(select * from people order by $theorder") ($theother只是查询函数中的一个变量。接收$_POST['val']))的值

if(isset($_POST['val'])) {
    $data['people'] = $this->database->listPeople($_POST['val']);
    exit;
}

之后,我在视图中收到这个变量,我运行foreach循环来获取数组的不同部分(人的名字,他的年龄等),并将其放置在他们应该的方式。

问题是-如果我这样做没有ajax,当我有静态排序值-一切工作正常。我并不是说这就是问题所在:D,问题基本上是它不能与ajax一起工作……我试图在js回调中接收数组并使用

创建布局
$.each(eval(data), function() {
  $('#container').text('<div>' + eval(res).name + '</div>');
});

但这也是一个失败…

我应该如何组织和创建我的代码,使一切正常工作?

我对Ajax有点陌生,所以我希望我能从你们那里学到如何做到这一点。我已经搜索了整个互联网,并看到了很多ajax教程和其他类型的材料(例如StackOverflow),但我仍然无法得到,我如何才能在我的特殊情况下做到这一切。我已经浪费了大约12个小时试图解决这个问题,但无法做到,所以我希望你能告诉我是否有任何有用的拯救。

谢谢您的考虑。

嗨,你需要3个部分使ajax工作,

    生成页面的服务器端代码
  • ajax(客户端)调用和响应

另外,完全替换表比挑选元素更容易。但这取决于你。

假设我们有一个ajax调用的页面

 <script type="text/javascript" >
 $(document).ready(function() {
    $(".order-by-select").click(function() {var orderValue = this.value;
    $.post("<?php echo base_url() ?>welcome/index", {val: orderValue}, function(data) {
        alert(data);
    });
});
</script>

现在您似乎有一些json响应,我假设您是从上面的警报中获得的;

 [{"id":"1","name":"Nick","age":"18"},{"id":"2","name":"John","age":"23"}]

我还假设它来自于

之类的东西
echo json_encode( array( array('id'=>1, ...), array('id'=>2 ...) .. ); 

在你告诉服务器这是json之前,这是很重要的,你使用一个报头,但是你不能在报头之前输出任何东西,在json报头之后,所有的输出必须是json格式,否则它不会工作,这就像告诉浏览器这是html,或图像等内容。

  Header("Content-Type: application/json");
  echo json_encode( ....

有时你可以不这样做,但通常你需要使用eval或其他东西,通过告诉浏览器它的json你不需要它。现在做一个警报是伟大的,但如果你看到字符串数据[{"id": ..你的头是错误的,你应该得到类似[object]当你做警报。

不,一旦我们有了真实的Json对象我们就可以利用所有美妙的数据

<script type="text/javascript" >
 $(document).ready(function() {
    $(".order-by-select").click(function() {var orderValue = this.value;
    $.post("<?php echo base_url() ?>welcome/index", {val: orderValue}, function(data) {
        $.each(data, function(i,v){
            alert(v.id);
            alert(v.name);
        });
    });
});
</script>

这应该循环遍历所有数据并发出2个警报,首先是id,然后是名称,对吧?接下来,使用.text().append()

替换内容就很简单了
  <script type="text/javascript" >
 $(document).ready(function() {
    $(".order-by-select").click(function() {var orderValue = this.value;
    $.post("<?php echo base_url() ?>welcome/index", {val: orderValue}, function(data) {
        $.each(data, function(i,v){
           $('#test').append('<p>'+v.id+'</p>');
        });
    });
});
</script>
<p id="test" ></p>