2013-06-04 4 views
0

У меня есть форма, которую я хочу показать отклик в div через AJAX. Вот образ формы от funds_transfer.php.Формы не удалось отправить

enter image description here

я проверить его с ручным method=post и представить с формой, и она работает хорошо. Вот частичный PHP код из funds_transfer_backend.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 выше будет получать данные из БД и заселили ее в select box и disabled text box. Нет проблем с тем, что в настоящее время он работает хорошо.

Проблема есть, нет ответа в div id="stage после отправки и подтверждения data.response==-1. Я не уверен, в чем проблема, вероятно, форма вообще не представлялась. Пожалуйста, помогите и заблаговременно.

ответ

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!" 
+0

Большое спасибо. Это решило :) – sg552

1

Удалить запятую в этой строке:.

amount  : five, 
+0

я удалить запятую, но до сих пор никаких изменений :( – sg552

1

Я думаю, вы должны использовать $ ('форма [имя = YourFormName]') сериализации();

.... 
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"); 
... 
+0

ли мне нужно использовать '<входной тип =«кнопка»значение =«Отослать»OnClick =«обновление();»>' для запускать функцию 'update()' – sg552

+0

Да. Код выше - это только часть вашего кода – StupidDev

1

если вы используете хром, запустить инструменты разработчика (Ctrl + Shift + I), перейдите на вкладку Сеть, а затем отправить форму. если форма фактически отправляется, вы сможете проверить как запрос, так и ответ, чтобы увидеть, что именно отправляется и возвращается с сервера. если ваша форма не отправлена ​​, из-за ошибки JavaScript, например, ошибка появится на вкладке Консоль.

Аналогичные инструменты для отладки существуют и для FireFox.

пару других вещей, чтобы отметить:

1) Ваш JavaScript будет заселять «два» переменную неправильно. он ссылается на элемент с идентификатором «index_num», однако идентификатор этого элемента является «селектором». что, как говорится, вы должны просто использовать метод serialize(), о котором говорил Vu.

2) ваш PHP-код повторяет необработанное сообщение об ошибке, прежде чем повторять ответ JSON. это приводит к недействительности JSON. вы должны сохранить ошибку в переменной и нажать эту ошибку на ассоциативный массив с помощью надлежащего ключа (например, «сообщение»). то вы можете отобразить, что на вашей странице так:

$('#stage').show().html(data.message); 
1

Сначала вы вторя ошибку в PHP, и вы ожидаете JSON в ответ на успех AJAX. Поэтому сначала удалите следующую строку в сценарии сервера/PHP или скажите, что не эхо ничего, кроме JSON.

echo "Please complete the form!"; 

И убедитесь, что ваш вывод PHP выглядит следующим образом по правильному сценарию.

{"response":-1} 

Теперь ваша data переменная в успехе AJAX будет содержать только 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(); 
} 
Смежные вопросы