0

答えを探したが喜びがないので、ここに行きます...

私はモバイルハイブリッドアプリに取り組んでいます。ユーザーにID番号を入力してもらい、それを基本的な検証のためにjavascript関数に送信し、サーバーサイドPHPへのjQuery.getJSONリクエストを開始してデータを返し、jQueryがフォームdivにデータ。

現在、Firefox では実際にはまったく機能せず、送信ボタンを 2 回押した後にのみ 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);
?>

何が悪いのか分からず、ここ数日いろいろいじって直そうとしましたが、何の喜びもありませんので、助けていただければ幸いです。

4

2 に答える 2

0

@Robbie は、フォーム送信のデフォルトの動作を停止しているようには見えないという良い点を指摘しました。これを行うには、いくつか変更する必要があります。

  1. onSubmit="login540()"そうしonSubmit="return login540()"ないと、関数から返されたlogin540()ものはすべて無視されます。
  2. 関数の最後で、フォームが正常に送信されないようにlogin540()する必要があります。オブジェクトを最初の引数としてreturn false;渡し、代わりにを使用することもできます。eventevent.preventDefault()function login540(event){event.preventDefault();...}

submitただし、インライン JS (tisk, ti​​sk, :) を使用するのではなく、jQuery を使用してイベント ハンドラーをフォームにバインドすることもできます。

$('#login540form').on('submit', login540);

このようにして、HTML 全体に広がるのではなく、すべての JS を 1 か所に保持できます。

于 2012-05-09T00:10:47.210 に答える
0

関数 login540() の下部が欠落していますが、これはデフォルトの「送信」アクションを強制終了する必要があります。これは「return false;」で実行できます。最後に。終わりが見えないので、これが起こるかどうかはわかりませんが、AJAX の実行中にフォームが「送信」される可能性があります。

フォームにはアクションがないため、これはさらに複雑になります。これは、おそらくブラウザーの動作の違いによるものです。アクションを「#」に設定することをお勧めします。URL に「#」が追加されている場合は、フォームが送信され、関数によって停止されていません。

于 2012-05-09T00:04:14.277 に答える