2017-01-04 7 views
0

Небольшое приложение, над которым я работаю, дает мне головную боль. Я, наконец, заработал, чтобы автоматически заполнить одно поле с тем же значением, которое было введено в другом поле. Теперь я пытаюсь объединить это с запросом AJAX. Вот что должен делать сценарий.Ошибка обратного вызова Ajax возвращает пусто

Когда определенные слова вводятся в поле ввода, поле ввода рядом с этим должно автоматически содержать это слово на другом языке. Я использую для этого небольшой скрипт PHP, который не имеет отношения к проблеме, с которой я столкнулся. Сценарий PHP выводит слово «bonjour». Когда я ввожу слово «привет», поле ввода рядом с тем, где я ввело, должно автоматически автозаполняться до «bonjour» с использованием запроса ajax. Возможно, важно знать, что это поле ввода является частью формы, содержащей тысячи входных пар. Часть автозаполнения работает, но когда я пытаюсь объединить это с запросом AJAX, данные возврата успеха остаются пустыми. Кто-нибудь есть идея, почему данные запроса остаются пустыми? Я пытаюсь предупредить его, когда изменяется первое входное значение.

var handleData = function (data) { 
    alert(data); 
} 
var word = ''; 
$("table").on('change', '.master', function() { 
    $.ajax({ 
     url : '<?php echo site_url('wordsuggestion'); ?>/hello/english/french', 
     type: 'GET', 
     success : handleData 
    }); 
}); 
$(document).ready(function() { 
    var max_fields  = 1000; //maximum input boxes allowed 
    var wrapper   = $(".input_fields_wrap"); //Fields wrapper 
    var add_button  = $(".add_field_button"); //Add button ID 

    var x = 1; //initlal text box count 
    $(add_button).click(function(e){ //on add input button click 
     e.preventDefault(); 
     if(x < max_fields){ //max input box allowed 
      x++; //text box increment 
      $(wrapper).append('<tr><td><div class="form-group"><input type="text" class="master" name="or['+x+']"></div></td><td>&nbsp;</td><td><div class="form-group"><input type="text" class="slave" name="tr['+x+']"></div></td></tr>'); //add input box 
     } 
    }); 
}); 

Это будет форма, которая используется.

<form method="POST"> 
    <table width="100%" class="input_fields_wrap"> 
     <tr> 
      <td> 
       <div class="form-group"><input type="text" class="master" name="or[0]"></div> 
      </td> 
      <td>&nbsp;</td> 
      <td> 
       <div class="form-group"><input type="text" class="slave" name="tr[0]"></div> 
      </td> 
     </tr> 
    </table> 
    <button type="submit" id="save" class="btn btn-success pull-right">Save</button> 
</form> 
<button class="add_field_button btn btn-default">Add more fields</button> 

Заранее благодарен!

+2

Вы подтвердили, что ваш сервер возвращает данные с кодом состояния успеха? Используйте вкладку «Сеть» инструментов Chrome Developer, чтобы отслеживать ваши HTTP-запросы, а затем посмотрите, что произойдет, когда вы запускаете вызов AJAX. –

+0

@FredVollmer Я работал с этими запросами раньше и никогда не испытывал проблем. Я не могу найти его на вкладке сети, тo. –

+0

«не удается найти его на вкладке сети». Тогда либо вы не посмотрели в нужное место, либо вызов ajax не происходит. Есть ли какие-либо ошибки в консоли? Появляется ли 'alert' в методе handleData? Также обычно, если вы используете метод '.ajax', вы должны обрабатывать обратный вызов« error », чтобы вы могли отслеживать ответы об ошибках и обрабатывать их в пользовательском интерфейсе. – ADyson

ответ

0

Я решил. Это была очень простая (глупая) ошибка, я только начинаю с JS. По какой-то причине эту функцию необходимо обернуть $(function() {}).

$(function() { 
$("table").on('change', '.master', function() { 
     $.ajax({ 
      url : '<?php echo site_url('wordsuggestion'); ?>/hello/english/french', 
      type: 'GET', 
      success : handleData 
     }); 
    }); 
}); 
+0

Фактически вы могли бы перенести его в свой существующий '' (document) .ready (function() {'block. Это одно и то же. Он говорит, что код ждет, пока вся страница будет загружена, прежде чем пытаться запустить любой скрипт code - если вы объявляете обработчик события (например, ваше событие изменения) на первой странице перед объявлением любых элементов HTML, тогда он будет запускаться, но не присоединяться к каким-либо событиям, потому что в этот момент нет элементов для его присоединения. готовая "оболочка означает, что код будет ждать, пока все остальное не появится перед запуском. Теперь я чувствую себя немного плохо, что я этого не заметил! – ADyson

+0

@ADyson Нет проблем! Спасибо, это было нелогично, но теперь это имеет смысл. используйте эту функцию $ для каждого обработчика событий? –

+0

Да, вполне разумно обернуть все обработчики внутри ('$ (function() {' или '$ (document) .ready (function() {' (они в точности эквивалентны, один это просто сокращение для другого), то вы знаете, что вся страница будет загружена до того, как код попытается присоединить события. – ADyson