为什么使用ajax时出现400(错误请求)错误?

时间:2019-10-15 15:09:02

标签: php ajax codeigniter

我有一个调用js函数的下拉菜单:

                <select class="form-control" name="product" id="product" onchange="populateProductLine(this.value)">
                    <option selected="selected" value="" disabled="">Select Product</option>
                    <?php foreach ($products as $product) { ?>
                        <option value="<?=$product['productId']?>"><?=$product['productName']; ?></option>
                    <?php } ?>
                </select>

然后js函数使用ajax调用控制器方法:

function populateProductLine(productId) {

if (productId == '') {
//document.getElementById("chargeable").value = "";
} else {
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
        xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            var myObj = JSON.parse(this.responseText);
            console.log(myObj);
        }
    };
    xmlhttp.open("GET","<?php echo base_url(); ?>products/getproduct(" + productId + ")",true);
    xmlhttp.send();
}

}

控制器方法(现在只是虚拟数据):

    public function getproduct($product_id) {

    $myArr = array("John", "Mary", "Peter", "Sally");

    $myJSON = json_encode($myArr);

    echo $myJSON;

}

为什么会出现400(错误请求)错误?我使用Codeigniter。

2 个答案:

答案 0 :(得分:0)

js函数然后使用ajax调用控制器方法:

<script type="text/javascript">
function populateProductLine(productId) {
if (productId == '') 
{
  alert('if');
}
else 
{
$.ajax({
     url:"http://localhost/narson/stackoverflow/getproduct",
     type:"post",
     data:{'productId':productId},
     datatype: "json",
     success:function(data,status)
     {
        console.log(data);
     }
     });
    }
  }
</script>


 public function getproduct() {

    $productId = $this->input->post('productId');
    $myArr = array("John", "Mary", "Peter", "Sally");

    $myJSON = json_encode($myArr);

    echo $myJSON;

}

答案 1 :(得分:0)

在Codeigniter中,不允许提交() URI字符,这将导致400 (Bad Request) http状态。

按如下所示在ajax请求上固定URI:

xmlhttp.open("GET","<?php echo base_url(); ?>products/getproduct/" + productId,true);