PHP与原型的AJAX

PHP与原型的AJAX,php,javascript,ajax,codeigniter,for-loop,Php,Javascript,Ajax,Codeigniter,For Loop,我有一个php函数,它返回JSON以响应ajax的交付费用请求。以下是php函数: public function getDeliveryOptions($weight, $postcode) { if($weight == 0) { return array(array("name" => "Non-Deliverable", "value" => "0.00")); } $this->db->where('dmc

我有一个php函数,它返回JSON以响应ajax的交付费用请求。以下是php函数:

public function getDeliveryOptions($weight, $postcode)
{

    if($weight == 0)
    {

        return array(array("name" => "Non-Deliverable", "value" => "0.00"));

    }

    $this->db->where('dmc_lower_boundary <=', $weight);
    $this->db->where('dmc_upper_boundary >=', $weight);

    if(preg_match("([aA][bB](3[1-8]|4[1-5]|5[1-6])\s?[1-9][a-zA-Z]{2}|[fF][kK](19|20|21)\s?[1-9][a-zA-Z]{2}|[hH][sS][1-9]\s?[1-9][a-zA-Z]{2}|[iI][vV][1-9]{1,2}\s?[1-9][a-zA-Z]{2}|[kK][aA](27|28)\s?[1-9][a-zA-Z]{2}|[kK][wW][1-9]{1,2}?\s?[1-9][a-zA-Z]{2}|[pP][aA][2-8][0-9]\s?[1-9][a-zA-Z]{2}|[pP][hH]([156789]|1[056789]|[2-5][0-9]){1,2}\s?[1-9][a-zA-Z]{2}|[zZ][eE][1-9]\s?[1-9][a-zA-Z]{2})", $postcode))
    {

        $this->db->where("dm_id = ", 1);
        $this->db->or_where("dm_id =", 3);

    }
    elseif(preg_match("/([bB][tT][1-9]{1,2}\s?[1-9][a-zA-Z]{2}|[iI][mM][1-9]{1,2}\s?[1-9][a-zA-Z]{2}|[tT][rR](21|22|23|24|25)\s?[1-9][a-zA-Z]{2})/", $postcode))
    {

        $this->db->where("dm_id =", 1);
        $this->db->or_where("dm_id =", 4);

    }
    elseif(preg_match("/([gG][yY][1-9]\s?[1-9][a-zA-Z]{2}|[jJ][eE][1-4]\s?[1-9][a-zA-Z]{2})/", $postcode))
    {

        $this->db->where("dm_id =", 1);
        $this->db->or_where("dm_id =", 5);

    }
    else
    {

        $this->db->where("dm_id =", 1);
        $this->db->or_where("dm_id =", 2);

    }

    $this->db->group_by("dm_id");
    $query = $this->db->get("delivery_method_option_views");
    //print_r($query->result());
    //print_r(json_encode($query->result()));
    return(json_encode($query->result()));
}

我不是原型方面的专家,但在我看来,您的NVPREponse是一个字符串,而不是转换为javascript对象。请参阅原型文档,了解如何具体评估JavaScript响应和响应

您的代码似乎还有一些其他问题

在PHP代码中:

if($weight == 0)
    {

        return array(array("name" => "Non-Deliverable", "value" => "0.00"));

    }
返回一个数组而不进行JSONing,这是故意的吗

此外,似乎还有一个逻辑错误:

$this->db->or_where("dm_id =", 3);
查询dm_id=3,而不考虑之前设置的任何位置,以便

$this->db->where('dmc_lower_boundary <=', $weight);
$this->db->where('dmc_upper_boundary >=', $weight);
编辑:

在本例中,您编写的查询工作得非常好,但是您应该注意到Codeigniter并没有在其查询中使用括号或参数,因此在同一查询中组合OR和and可能会有问题。 您编写查询代码的方式如下所示,效果良好:

SELECT * FROM (`t_name`) 
WHERE `dmc_lower_boundary` <= $weight AND `dm_id` = 1 OR `dm_id` = 3
以不同的顺序编写相同的查询,或者有时在编写复杂查询时,可能会得到非常不同的结果:

SELECT * FROM (`t_name`) 
WHERE `dm_id` = 1 OR `dm_id` = 3 AND `dmc_lower_boundary` <= $weight

经过几次严重的错误之后,我学会了小心处理或_where:

但是我的数据库查询得到了正确的结果谢谢你的第一个数组:我的坏。CI不会在语句或语句周围加括号,因此它们往往有问题。我编辑了答案以反映这一点。
$this->db->where_in("dm_id", array(1,3));
SELECT * FROM (`t_name`) 
WHERE `dmc_lower_boundary` <= $weight AND `dm_id` = 1 OR `dm_id` = 3
SELECT * FROM (`t_name`) 
WHERE `dm_id` = 1 OR `dm_id` = 3 AND `dmc_lower_boundary` <= $weight