无法使用ajax从post请求中检索值

时间:2014-06-26 12:51:06

标签: javascript php ajax

我刚刚编写了第一个Ajax请求,但它不起作用。当选择下拉列表中的新值时,需要更新。

这是我的javascript代码:

$(document).ready(function() {
function ajaxLoaded(response) {
    $('#performanceResults').html(response);
}
function doRequest() {
    $.ajax({
        url: "results.php",
        type: 'POST',
        success: ajaxLoaded
    });
}
$('#performance').change(doRequest);
});

这就是我检索q部分(不起作用)的方法:

public function getResults() {
    $intCase = intval ( $_POST ['q'] );

    var_dump ( $intCase );

    if ($intCase == 1 or $intCase == 2 ) {
        if ($intCase == 1) {
            $strSql = 'select bidder_id, won, lost, fillrate, costs, cost_auction from result_bidder where tagload = ( select max(tagload) from result_bidder) order by cost_auction asc limit 1';
        }
        if ($intCase == 2) {
            $strSql = 'select bidder_id, won, lost, fillrate, costs, cost_auction from result_bidder where tagload = ( select max( tagload ) from result_bidder ) order by fillrate asc limit 1';
        }

        $arrBestPerformer = $objDatabase->queryresult ( $strSql );
        echo "<table border='1'>
        <tr>
        <th>bidder_id</th>
        <th>won</th>
        <th>lost</th>
        <th>fillrate</th>
        <th>costs</th>
        <th>cost_auction</th>
        </tr>";

        while ( $row = mysqli_fetch_array ( $arrBestPerformer ) ) {
            echo "<tr>";
            echo "<td>" . $row ['bidder_id'] . "</td>";
            echo "<td>" . $row ['won'] . "</td>";
            echo "<td>" . $row ['lost'] . "</td>";
            echo "<td>" . $row ['fillrate'] . "</td>";
            echo "<td>" . $row ['costs'] . "</td>";
            echo "<td>" . $row ['cost_auction'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
}

我的表格:       公共函数SelectPerformanceIndicator(){

  $this->getResults ();

  $str = '<form >';
  $str .= 'Select your performance indicator<br>';
  $str .= '<select id = "performance">';
  $str .= '<option value = "">Select Performance Indicator</option>';
  $str .= '<option value = "1">Cost per auction  </option>';
  $str .= '<option value = "2">Fillrate </option>';
  $str .= '</select>';
  $str .= '</form>';
  $str .= '<br>';
  $str .= '<div id="performanceResults">';

  return $str;
}

2 个答案:

答案 0 :(得分:0)

您的问题是您的POST数据字符串无效。

xmlhttp.send("q ="+  str);

应该是

xmlhttp.send("q="+  str);

没有q=之间的空格。

你错过了发送标题告诉PHP它应该将随请求发送的数据映射到$_POST var。

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

所以你的正确功能是:

function showUser(str) {
    if (str=="") {
        document.getElementById("performance").innerHTML="";
        return;
    } 
    if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
    } else { 
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("performance").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("POST","results.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("q="+  str);
}

但请再次:使用jQuery制作AJAX requests。如果你使用jQuery,你不必再为这样的错误而烦恼。

答案 1 :(得分:0)

您在查询字符串中添加了空格,"q ="这在q变量中的行为不是$_POST, 删除key=

之间的空格
xmlhttp.send("q ="+  str);

xmlhttp.send("q="+  str);

更新答案:当请求有POST标头时,AJax Content-type: application/x-www-form-urlencoded将会正常工作。 请在send方法

之前添加标题
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

OR 您可以通过GET方法发送请求,无需标题