Ajax没有将POST var发送到url

时间:2014-03-21 13:55:16

标签: php jquery ajax json html-select

我需要使用数据库中的数据填充相关的选择。 HTML页面包含select id'fontes'和select id'cargos'。 jQuery代码现在:

$("#fontes").change(function () {
  $.ajax({
    type: "POST",
    url: "json_cargos_fonte.php",
    data: ({fonte: $("#fontes").val()}),
    dataType: "json",
    success: function(json){
      var options = "";
      $.each(json, function(key, value){
        options += '<option value="' + key + '">' + value + '</option>';
      });
      $("#cargos").html(options);
    }
  });
});

json_cargos_fonte.php的内容:

<?php
include ("conexao.php");
header('Content-type: text/json');
$fonte = $_POST['fonte'];
$retorno = array();
$queryCargos = "SELECT * FROM `cargos` WHERE `fonte` = '$fonte' ORDER BY `cargo`";
$resultCargos = $mysqli->query($queryCargos) or trigger_error($mysqli->error."<br>[ $queryCargos]");
while ($row = $resultCargos->fetch_object()) {
    $retorno[] = $row->cargo;
}
echo json_encode($retorno);
?>

我已经测试过设置手动值而不是'$ fonte'并且它有效,但是传递在fontes中选择的值不起作用。除了我在HTML中编写的默认选项之外,没有选项出现:

<select id="cargos" name="cargos" style="min-width: 250px;">
  <option>Selecione um Cargo</option>
</select>

3 个答案:

答案 0 :(得分:1)

如果你想用jquery获得选定的值,试试这个

$("#fontes option:selected").val();

答案 1 :(得分:0)

为了使这一行有效:

$fonte = $_POST['fonte'];

您需要在ajax调用中序列化数据:

data: $.serialize({fonte: $("#fontes").val()}),

答案 2 :(得分:0)

jQuery更改函数内部select的警告值,并看到它在字符串的末尾添加了一个'\'。因此,例如,InfoJobs显示为InfoJobs \

<强>解决方案:

var fonte = $("#fontes").val();
var fonteNew = fonte.replace("\\","");

然后,在$.ajax内:

type: "GET",

data: {fonte: fonteNew},

在PHP文件中,从POST更改为GET。