我有一个表单,我希望通过AJAX在div
中显示响应。以下是funds_transfer.php
的表单图片。
我使用手动method=post
对其进行测试并使用表单提交,并且效果很好。以下是funds_transfer_backend.php
的部分PHP代码:
$index_num = $_POST['index_num'];
$to_account_num = $_POST['recipient'];
$amount = $_POST['amount'];
if ($amount == '' || $to_account_num == '' || $index_num == -1){
echo "Please complete the form!";
$response = -1;
}
else {
// other code goes here..
$display = array('response' => $response); // for ajax response later
echo json_encode($display);
PHP给了我这个输出:
Please complete the form!{"response":-1}
现在我想用AJAX实现它,它目前无法正常工作。这是我目前没有工作的html + jQuery代码:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
<script type="text/javascript">
function update() {
var two = $('#index_num').val();
var three = $('#recipient_box').val();
var five = $('#amount_box').val();
$.post("funds_transfer_backend.php", {
index_num : two,
recipient : three,
amount : five
},function(data){
if (data.response==-1) {
$('#stage').show().html("Please complete the form!");
}
$('#stage').delay(2000).fadeOut();
},"json");
}
</script>
//other code goes here..
<p>Transfer your funds to other account
<script type="text/javascript">
// Pre populated array of data
var myData = new Array();
<?php
$sql="SELECT * FROM `account` WHERE client_id='$id'";
$result=mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
echo "myData.push('".$row['funds']."');";
$result_array[] = $row['id'];
}
?>
</script>
<form id="example" name="example">
Select your account<select id="selector" name="index_num" style="margin-left: 10px;">
<option value="-1">Account Number</option>
<?php //echo $result_array[0];
$num = count($result_array) - 1;
$i=0;
while($i<=$num)
{
echo "<option value=\"$i\">$result_array[$i]</option>";
$i++;
}
?>
</select>
<br />
Funds : RM <input type="text" id="populateme" name="funds" disabled/><br>
Recipient Account Number <input type="text" id="recipient_box" name="recipient" /> <br>
Amount : RM <input type="text" id="amount_box" name="amount"/><br>
<input type="button" value="Submit" onclick="update();">
<input type="reset" value="Reset">
</form>
<div id="stage" style="background-color:#FF6666; padding-left:20px; color: white;"></div>
<script type="text/javascript">
document.example.selector.onchange = updateText;
function updateText() {
var obj_sel = document.example.selector;
document.example.populateme.value = myData[obj_sel.value];
}
</script>
</p>
上面的SQL查询将从db获取数据并在select box
和disabled text box
中填充它。没问题,它目前运作良好。
问题是在提交和验证div id="stage
后,data.response==-1
中没有回复。我不确定这里的问题是什么,可能表格根本没有提交。请提前帮助和谢谢。
答案 0 :(得分:1)
删除此行上的逗号:
amount : five,
答案 1 :(得分:1)
我认为你应该使用$('form [name = YourFormName]')。serialize();
....
var posted = $('form[name=YourFormName]').serialize();
$.post("funds_transfer_backend.php", posted ,function(data){
if (data.response==-1) {
$('#stage').show().html("Please complete the form!");
}
$('#stage').delay(2000).fadeOut();
},"json");
...
答案 2 :(得分:1)
如果您正在使用Chrome,请启动开发人员工具(ctrl + shift + I),转到“网络”标签,然后提交表单。如果表单实际上已提交,您将能够检查请求和响应,以确切了解提交给服务器的内容和从服务器返回的内容。如果您的表单不正在提交,例如由于JavaScript错误,该错误将显示在“控制台”标签中。
FireFox也存在类似的调试工具。
还有其他一些事项需要注意:
1)您的JavaScript错误地填充了“两个”变量。它引用了一个id为“index_num”的元素,但该元素上的id是“selector”。实际上,你应该使用Vu提到的serialize()方法。
2)您的PHP代码在回显实际的JSON响应之前回显原始错误消息。这导致无效的JSON。您应该将错误存储到变量中,并使用正确的键(例如“message”)将该错误推送到关联数组。然后你就可以在你的页面上显示它:
$('#stage').show().html(data.message);
答案 3 :(得分:1)
首先,您回应PHP中的错误,并期望在AJAX成功的响应中使用JSON。因此,首先删除服务器/ PHP脚本中的以下行,或者说不要回显除JSON之外的任何内容。
echo "Please complete the form!";
确保您的PHP输出在正确的场景中如下所示。
{"response":-1}
现在,AJAX成功中的data
变量将仅包含json格式。在检查parseJSON
之前执行if (data.response==-1)
,如下所示。
function(data){
data = $.parseJSON(data);
if (data.response==-1) {
$('#stage').show().html("Please complete the form!");
}
$('#stage').delay(2000).fadeOut();
}
答案 4 :(得分:1)
Add id
<select id="index_num" name="index_num" style="margin-left: 10px;">
because you index_num value is not sending and you get a notice as response with your
json. Also remove from funds_transfer_backend.php this line -> echo "Please complete the form!"