【问题标题】:Issue with posting variable created with ajax使用 ajax 创建的发布变量的问题
【发布时间】:2013-01-30 18:30:56
【问题描述】:

这是一个艰难的过程。我第一次尝试使用 ajax。基本上在从第一个字段中选择一个选项后,js 和 xml 运行一个 php 脚本,该脚本根据它从 SQL 表中提取的信息创建下一个下拉列表。令人惊讶的是,对于我的第一次尝试,一切都很好。当您运行最终查询时,问题就出现了,应该发布的变量 ($_POST['ports'];) 计算为单个空格字符,而不是标签中选择的值。代码时间:

html:

<h1>Enter port data to set how your table will look</h1>
<select style="width:150px;" onChange="showUser(this.value)">

<option value="">Select A Table Type</option>
<option value="option1">option1</option>
<option value="247">Custom</option>
</select>
<br>
<div id="select2">
</div>

javascript:

function showUser(str){
document.getElementById('hide').style.display='none';
document.getElementById('select2').innerHTML="";
if(str===""){
    document.getElementById('hide').style.display='none';
    document.getElementById('select2').innerHTML="";
    return;
}

if(str==="247"){
    document.getElementById('hide').style.display='block';
    return;
}

// code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest){
    xmlhttp=new XMLHttpRequest();
}

// code for IE6, IE5
else{
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

//set up return
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("select2").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","gethtml.php?q="+str,true);
xmlhttp.send();
}

gethtml.php

//include connection
include 'log.php';

//get vars
$q=$_GET['q'];

//make the query
$sql = "SELECT DISTINCT Model 
FROM tbl
WHERE Manufacturer = '".$q."'";

//make the new box
echo '<select name="ports" style="width:150px;">';
echo '<option>Select A Port Total</option>';
$i=1;
foreach($conn->query($sql) as $row) {
echo $row['Model'];
echo '<option value="'.$row['Model'].'">'.$row['Model'].'</option>';
$i++;
}
echo "</select>";

所以,所有内容都发送到 gethtml.php。查询运行正确,&lt;select&gt; 框在那里,但是其中的&lt;select&gt; 部分似乎有错误,我就是不知道那是什么。这是提交 php 中的 sn-p,在您提交 &lt;select&gt; 搞砸的表单后运行。

echo "<pre>";print_r($_POST);echo"</pre>";

哪个输出

Array
(
[ports] => 
)

我知道你看不出来,但是当我突出显示该位时,那里有一个空白字符,我什至通过isset() 运行它以查看它我是对的并且那里有一个字符。

这是使用 firebug 查看时创建的 html 的 xml 图像:

有人有什么想法吗?这非常令人沮丧.. 显然,萤火虫图像显示它看起来不像它应该的样子......如果你们需要更多信息,请询问

如果值得一提,我正在使用 chrome。

【问题讨论】:

    标签: php javascript mysql xml ajax


    【解决方案1】:

    你没有发布你的 ajax 请求。

    xmlhttp.open("GET","gethtml.php?q="+str,true);
    

    您正在通过 get 发送它。在 php 中,尝试 print_r($_GET) 而不是 $_POST 并检查您是否看到正确的值。

    【讨论】:

    • @JohnDoe 尝试打开 firebug/developer 工具并查看 XMLHttpRequest。您可以看到您用于发送的方法以及您通过 post/get 发送的 url 和变量。这使您可以仔细检查您正在向服务器发送您期望的内容。
    • 也许我没有在正确的地方寻找,但我似乎找不到任何地方可以显示我发送的内容,我得到的只是更深入地了解 html 到 php xml 脚本。
    • 你用的是什么浏览器?
    • 在页面上,按f12,进入网络标签。更改选择,它应该显示 ajax 请求。您可以在那里看到 url、方法(以及更多),如果您单击 url,您可以看到请求的详细信息(发布变量、响应)
    • 我想我找到了我们正在寻找的东西,当我将它提交到最终的 php 页面时,开发人员面板实际上显示了发布的变量,所有要传输的内容包括 12:ports:12并且使用 post 方法发送
    【解决方案2】:
        foreach($conn->query($sql) as $row) {
    echo $row['Model'];
    echo '<option value="'.$row['Model'].'">'.$row['Model'].'</option>';
    $i++;
    }
    

    请看上面的第 2 行。

    【讨论】:

    • 很好,这解释了为什么 firebug 显示 12,但不能解释为什么它在空格而不是值 12 上发布,
    • 如果它解决了问题..."...但不是为什么它在空格上发布而不是值 12"
    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2018-12-12
    相关资源
    最近更新 更多