已经寻找答案但没有快乐,所以这里......
我正在开发一款移动混合应用。我希望用户填写他们的ID号,然后将其提交给javascript函数进行基本验证,然后将jQuery.getJSON请求踢入我的服务器端PHP返回数据,然后我的jQuery将重新填充表单div数据。
目前它在Firefox中根本不起作用,只有在我再次按下提交按钮后才能在Safari中正常工作。它返回正确的数据,因此链接正常。
我的问题是:为什么第一次点击后div不会重新填充?
HTML:
<div id="login540div">
<form id="login540form" onSubmit="login540()">
Enter Student ID number<input type="text" name="login540id" id="login540id"/>
<input type="submit" value="Submit" />
</form>
</div>
使用Javascript:
function login540(){
// validates the data entered is an integer.
var loginNo = document.getElementById("login540id").value;
//if(!isNaN(loginNo))
if((parseFloat(loginNo) == parseInt(loginNo)) && !isNaN(loginNo))
{
//jSonCaller(loginNo);
$.getJSON('http://localhost:8888/c05673160/login540.php?q='+loginNo, function(data){
//alert(data);
$('#login540div').html("<p>First Name ="+
data.firstName+
"</p> Last Name ="+data.lastName+" </p>Module No.1 ="+
data.moduleNo1+"</p> Module No.2 ="+
data.moduleNo2+"<p> Course ID="+
data.courseID+"</p>");
})
}
else
{
// alert(loginNo); CHECKED
alert("Please make sure to insert only a whole number");
}
然后PHP就这样......
<?php
include ("config.php");
/*
require_once('FirePHPCore/FirePHP.class.php');
ob_start();
$firephp = FirePHP::getInstance(true);
$var = array('i'=>10, 'j'=>20);
$firephp->log($var, 'Iterators');
*/
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root';
$dbname = 'collegeData';
$q=$_GET["q"];
$table = "studentTable";
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$conn)
die('Could not connect: ' . mysql_error());
if (!mysql_select_db($dbname))
die("Can't select database");
$result = mysql_query("SELECT * FROM {$table} WHERE studentID = '".$q."'");
if (!$result)
die("Query to show fields from table failed!" . mysql_error());
$json = array();
while($row = mysql_fetch_array ($result))
{
$json = array(
'firstName' => $row['firstName'],
'lastName' => $row['lastName'],
'moduleNo1' => $row['moduleNo1'],
'moduleNo2' => $row['moduleNo2'],
'courseID' => $row['courseID']
);
}
$jsonstring = json_encode($json);
echo $jsonstring;
mysql_close($conn);
?>
我无法弄清楚出了什么问题,过去几天我一直在搞乱各种各样的东西试图解决它,但没有快乐,所以我真的很感激你能给予的任何帮助。
答案 0 :(得分:0)
函数login540()的底部缺失,但这需要终止默认的“提交”操作:这可以通过“return false”来完成。在末尾。因为我看不到结束,不确定是否发生这种情况,但是在AJAX运行时,表单可能会“提交”。
由于表单没有动作,这可能会解释不同的浏览器行为。我建议将操作设置为“#”,然后,如果您在网址中添加“#”,则表单已提交但未被您的功能停止。
答案 1 :(得分:0)
@Robbie有一个好处,你似乎没有停止表单提交的默认行为。要做到这一点,你需要改变一些事情:
onSubmit="login540()"
需要更改为onSubmit="return login540()"
,否则您将无法从login540()
函数返回任何内容。login540()
功能结束时,您需要return false;
才能阻止表单正常提交。您也可以将event
对象作为第一个参数传递,然后使用event.preventDefault()
代替:function login540(event){event.preventDefault();...}
。然而,为了帮助自己,您可以使用jQuery将submit
事件处理程序绑定到表单而不是使用内联JS(tisk,tisk,:))
$('#login540form').on('submit', login540);
通过这种方式,您可以将所有JS保存在一个位置,而不是遍布HTML。