2013-03-06 49 views
0

我想通過jQuery發佈表單數據到PHP。這是代碼。jQuery Ajax沒有運行錯誤

------------- HTML表單--------------

<div id="createQuestionBlock"> 
    <form id="createQuestionForm" action="" method="POST"> 
     Question Code: <input id="code" class="createQuestionTextBox1" type="text" name="questionCode"><span id="invalid_1"></span><br> 
     Question Name: <input id="question" class="createQuestionTextBox1" type="text" name="questionName"><span id="invalid_2"></span><br> 
     Correct Answer: <input id="answer" class="createQuestionTextBox1" type="text" name="correctAnswer"><span id="invalid_3"></span><br> 
     Option 1: <input id="option1" class="createQuestionTextBox2" type="text" name="option_1"><span id="invalid_4"></span><br> 
     Option 2: <input id="option2" class="createQuestionTextBox2" type="text" name="option_2"><span id="invalid_5"></span><br> 
     Option 3: <input id="option3" class="createQuestionTextBox2" type="text" name="option_3"><span id="invalid_6"></span><br> 
     Option 4: <input id="option4" class="createQuestionTextBox2" type="text" name="option_4"><span id="invalid_7"></span><br> 
     Option 5: <input id="option5" class="createQuestionTextBox2" type="text" name="option_5"><span id="invalid_8"></span><br> 
     <span id="quizCreated"></span> 
     <input type="Submit" id="questionSubmit" value="Create Question"></input> 
    </form> 
</div> 

---------- ------ JAVA SCRIPT JQUERY HANDLING ----------------

function SubmitFormCreationData() { 
$("#createQuestionForm").submit(function(e) { 
    e.preventDefault(); 

    alert("check1"); 

    $.ajax({ 
     url: 'InsertNewQuestion.php', 
     data: $("#createQuestionForm").serialize(), 
     dataType: 'json', 
     success: function(data) { 
      alert("check2"); 

      var infoCorrect = data.infoCorrect; 

      if (infoCorrect == 0) { 
       alert("Quiz Created"); 
       window.setTimeout(delay,2000); 
       return true; 
      } else if (infoCorrect == 1) { 
       $("#invalid_1").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      } else if (infoCorrect == 2) { 
       $("#invalid_2").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      } else if (infoCorrect == 3) { 
       $("#invalid_3").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      } else if (infoCorrect == 4) { 
       $("#invalid_4").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      } else if (infoCorrect == 5) { 
       $("#invalid_5").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      } else if (infoCorrect == 6) { 
       $("#invalid_6").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      } else if (infoCorrect == 7) { 
       $("#invalid_7").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      } else { 
       $("#invalid_8").text(" Invalid!").show().fadeOut(2000); 
       return false; 
      }  
     } 
    }); 

    alert("check3"); 
}); 
} 

------------ PHP FILE --- ----------------

<?php 
$con = mysql_connect("localhost","root",""); 

if (!$con) 
    die("ERROR: ".mysql_error());     

$db_con = mysql_select_db("QuestionsDatabase",$con); 

if (!$db_con) 
    die("ERROR: ".mysql_error()); 

$questionCode = $_POST['questionCode']; 
$questionName = $_POST['questionName']; 
$correctAnswer = $_POST['correctAnswer']; 
$option_1 = $_POST['option_1']; 
$option_2 = $_POST['option_2']; 
$option_3 = $_POST['option_3']; 
$option_4 = $_POST['option_4']; 
$option_5 = $_POST['option_5']; 

$infoCorrect = 0; 

if (CheckCodeField($questionCode) == false) 
    $infoCorrect = 1; 
else if (CheckQuestionAnswerField($questionName) == false) 
    $infoCorrect = 2; 
else if (CheckCorrectAnswerField($correctAnswer) == false) 
    $infoCorrect = 3; 
else if (CheckQuestionAnswerField($option_1) == false) 
    $infoCorrect = 4; 
else if (CheckQuestionAnswerField($option_2) == false) 
    $infoCorrect = 5; 
else if (CheckQuestionAnswerField($option_3) == false) 
    $infoCorrect = 6; 
else if (CheckQuestionAnswerField($option_4) == false) 
    $infoCorrect = 7; 
else if (CheckQuestionAnswerField($option_5) == false) 
    $infoCorrect = 8; 

if ($infoCorrect == 0) { 
    $rowIDList = mysql_query("SELECT rowID FROM questions"); 

    $currentGreatestRowID = -1; 

    $rowCount = 1; 

    while($row1 = mysql_fetch_assoc($rowIDList)) { 
     if ($currentGreatestRowID < $row1['rowID']) { 
      $currentGreatestRowID = $row1['rowID']; 
     } 

     $rowCount++; 
    } 

    $currentRowID = $currentGreatestRowID+1; 


    $sql = "INSERT INTO questions (rowID,questionCode,questionName,option_1,option_2,option_3,option_4,option_5,option_1_votes,option_2_votes,option_3_votes,option_4_votes,option_5_votes,correctAnswer,pollingStatus) 
    VALUES (".$currentRowID.",".$questionCode.",'".$questionName."','".$option_1."','".$option_2."','".$option_3."','".$option_4."','".$option_5."',0,0,0,0,0,".$correctAnswer.",0)"; 

    if (mysql_query($sql,$con)) { 
     echo "Inserted values"; 
    } 
    else { 
     echo ("Could not insert values: ". mysql_error()); 
    } 
} 

/*echo "| ".false." | "."0 | "; 
echo "CheckCodeField(questionCode) = ".CheckCodeField($questionCode).", "; 
echo "CheckQuestionAnswerField(questionName) = ".CheckQuestionAnswerField($questionName).", "; 
echo "CheckCorrectAnswerField(correctAnswer) = ".CheckCorrectAnswerField($correctAnswer).", "; 
echo "CheckQuestionAnswerField(option_1) = ".CheckQuestionAnswerField($option_1).", "; 
echo "CheckQuestionAnswerField(option_2) = ".CheckQuestionAnswerField($option_2).", "; 
echo "CheckQuestionAnswerField(option_3) = ".CheckQuestionAnswerField($option_3).", "; 
echo "CheckQuestionAnswerField(option_4) = ".CheckQuestionAnswerField($option_4).", "; 
echo "CheckQuestionAnswerField(option_5) = ".CheckQuestionAnswerField($option_5).", "; 
echo "infoCorrect = ".$infoCorrect;*/ 

$items = array('infoCorrect'=>$infoCorrect); 

json_encode($items);  

mysql_close($con); 

//-----------------functions-------------- 
function CheckCodeField($value) { 
    $isCodeValid = true; 

    if (is_numeric($value) == false) 
     $isCodeValid = false; 
    if ($value < 100000) 
     $isCodeValid = false; 
    if ($value > 999999) 
     $isCodeValid = false; 

    return $isCodeValid; 
} 

function CheckQuestionAnswerField($value) { 
    $isQAValid = true; 

    if($value == "") 
     $isQAValid = false; 
    if($value == null) 
     $isQAValid = false; 
    for($LCV=0; $LCV<(count($value)-1); $LCV++) { 
     if($value[$LCV] = "'") 
      $isQAValid = false; 
     if($value[$LCV] = '"') 
      $isQAValid = false; 
    } 

    return $isQAValid; 
} 

function CheckCorrectAnswerField ($value) { 
    $isAnswerValid = true; 

    if (is_numeric($value) == false) 
     $isAnswerValid = false; 
    if ($value < 1) 
     $isAnswerValid = false; 
    if ($value > 5) 
     $isAnswerValid = false; 

    return $isAnswerValid; 
} 
//---------------------------------------- 

?> 

現在的問題是,我可以看到第一個警報(分別爲「check1」),第二個警報(「check3」)BU t我看不到警報(「check2」),所以我的假設是錯誤是ajax形式。我已經嘗試直接從HTML頁面運行PHP文件,它能正常工作。出了什麼問題?

-after edit--

所以,我看着做呼應的JSON編碼變更後什麼信息的JSON編碼發送。這是發送的信息{「infoCorrect」:1}。不應該

else if (infoCorrect == 1) { 
    $("#invalid_1").text(" Invalid!").show().fadeOut(2000); 
    return false; 
} 

因爲infoCorrect運行是1

--------------編輯後2 ------------- -------------------------------------------------- ---------------------------------------- 以下是我如何調用SubmitFormCreationData( )功能如上所示。

$(document).ready(function() { 
    jQueryInitialization(); 

    ButtonsHandling(); 

    SubmitFormCreationData(); 

    setInterval(function() {UpdateData()}, 500); 
}); 

--------------最後編輯(找到解決方案)----------------------- -------------------------------------------------- ----

下面是答案中提到的解決方案的代碼。它不是一個真正的解決方案,而是一種解決方法。我使用後,而不是阿賈克斯,它的工作。還要確保你的jQuery文件是最新的。

function SubmitFormCreationData() { 
$("#createQuestionForm").submit(function(e) { 
    e.preventDefault(); 

    $.post("InsertNewQuestion.php", $("#createQuestionForm").serialize()).success(function(data) { 
     var infoCorrect = data.infoCorrect; 

     if (infoCorrect == 0) { 
      alert("Quiz Created"); 
      window.setTimeout(delay,2000); 
      return true; 
     } else if (infoCorrect == 1) { 
      $("#invalid_1").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     } else if (infoCorrect == 2) { 
      $("#invalid_2").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     } else if (infoCorrect == 3) { 
      $("#invalid_3").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     } else if (infoCorrect == 4) { 
      $("#invalid_4").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     } else if (infoCorrect == 5) { 
      $("#invalid_5").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     } else if (infoCorrect == 6) { 
      $("#invalid_6").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     } else if (infoCorrect == 7) { 
      $("#invalid_7").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     } else { 
      $("#invalid_8").text(" Invalid!").show().fadeOut(2000); 
      return false; 
     }   
    }); 
}); 
} 
+0

檢查開發人員工具的網絡選項卡,請求發生了什麼以及返回的內容。 – jeroen 2013-03-06 18:04:49

+0

是的,我會建議你檢查請求狀態。如果請求正常,你應該得到200。 – sweetamylase 2013-03-06 18:07:33

+0

這是網絡選項卡中的信息。請求URL:http://localhost/QuizAdminWebpage/InsertNewQuestion.php?questionCode = 1&questionName =&correctAnswer =&option_1 =&option_2 =&option_3 =&option_4 =&option_5 = 請求方法:GET 狀態代碼:200 OK – 2013-03-06 18:16:10

回答

-1

使用POST方法,而不是AJAX方法。請參閱問題中的最終編輯。

1

整個響應有,如果你設置數據類型爲JSON,但你是呼應了文本的JSON之前,這將導致jQuery來產生一個錯誤是一個有效的JSON字符串。

if (mysql_query($sql,$con)) { 
    echo "Inserted values"; 
} 

去除回聲,在JSON響應提出的任何消息,並確保你輸出的JSON(echo json_encode($items);)。

+0

我替換如果(mysql_query($ sql,$ con)){ echo「Inserted values」; } with $ submit = mysql_query($ sql,$ con); \t \t如果($提交!){ \t \t \t模具( 「ERROR:」 .mysql_error()); \t \t \t}。但是,我仍然看不到警報(「check2」); – 2013-03-06 18:14:43

+0

@VedaSadhak你輸出了('echo')json嗎? – Musa 2013-03-06 18:18:48

+0

是的,我更換了json_encode($ items);用echo json_encode($ items); – 2013-03-06 18:20:04

1

你必須echo了JSON:

echo json_encode($items); 
+0

我做了這個改變,但我仍然看不到alert(「check2」); – 2013-03-06 18:13:50

+0

@Veda不知道,但這是'mysql_close($ con);'在正確的地方? – Jai 2013-03-06 18:29:46