问题的措辞有点奇怪,但那是因为我不太确定如何用文字表达。我的问题如下。我正在使用ajax通过JS向我的php文件发出.get请求。
我有两个方法负责获取意义,因此我说:
$.get("babynames.php",
{
type: "meaning",
name: nested
},
function (data) {
//alert("Data loaded " + data);
$("#meaning").innerHTML = data;
});
另一个负责排名(正在进行的工作),看起来像这样:
$.get("babynames.php",
{
type: "rank",
name: name,
gender: gender
},
function(data){
//$("#grapharea").append(data);
document.getElementById("graph").innerHTML = data;
});
我的index.php中的预期输出看起来如此:
The name <name here> means:
__________________________________________________
<name meaning>
Popularity:
<Ranking goes here>
但是,名称和排名都低于受欢迎程度,因为似乎稍后的类型设置为“排名”。我调用两个JS函数的方式如下:
document.getElementById("search").addEventListener("click", function(e){
$("#resultsarea").show(); // un-hides the display area with all the info
nested = document.getElementById("allnames");
nested = nested.options[nested.selectedIndex].value;
document.getElementById("nested").innerHTML = nested;
e.preventDefault();
meaning();
rank();
});
我哪里出错了?
答案 0 :(得分:1)
混合两种样式的脚本通常不能很好地结合在一起,正如Barmar所指出的那样。
<?php
#babynames.php
if(isset($_POST['name'])){
// fetch meaning
// fetch rank
$response = [
'rank' => $rank,
'meaning' => $meaning
];
echo json_encode($response);
}
?>
对于客户:
$(function(){
$("#search").click(function(e){
e.preventDefault();
});
$("#allnames").change(function(e){
alert($("#allnames option:selected").text()); // use the one that works
alert($("#allnames option:selected").val()); // I dont have your html code.
var name = $("#allnames option:selected").val();
$.ajax({
type: "POST",
url: 'babynames.php'
data: {name:name},
success: function(json){
alert("Look at our PHP response.. " + json);
var o = jQuery.parseJSON(json);
alert(o.rank);
alert(o.meaning);
}
});
});
});
说实话,我不知道这段代码是否包含语法错误,但无论如何都需要一些工作。
这个想法是对下拉列表中的每个更改使用1个请求。您有一个名称,将其提交给PHP,获取排名和含义,并在1个响应中返回。
查看并学习此代码,这就是您应该如何处理事件。