2015-06-19 2 views
1

В принципе у меня есть одна форма, которую я хочу передать переменным на два отдельных php-скрипта для обработки на submit. То, что я сделал, кажется, работает отлично для моих целей, мне просто интересно, есть ли способ сделать это внутри одного сценария jquery вместо того, чтобы повторять сценарий и изменять URL-адрес, как я это сделал. Или это путь, который прошел? не могу найти много примеров этого использования в Google, но, возможно, я не искал правильные вещи. Также, если я делаю что-то плохое, пожалуйста, дайте мне знать, я очень новичок в Ajax, и каждый учебник, который я следую, по-видимому, делает что-то по-другому.Форма Ajax, представляющая два сценария

<script> 
$(document).ready(function(){ 
    $('#sform').submit(function(){ 

     // show that something is loading 
     $('#response').html("<b>Loading response...</b>"); 

     /* 
     * 'post_receiver.php' - where you will pass the form data 
     * $(this).serialize() - to easily read form data 
     * function(data){... - data contains the response from post_receiver.php 
     */ 
     $.ajax({ 
      type: 'POST', 
      url: 'move_to_lease.php', 
      data: $(this).serialize() 
     }) 



     .done(function(data){ 

      // show the response 
      $('#response').html(data); 

     }) 



     .fail(function() { 

      // just in case posting your form failed 
      alert("Posting failed."); 

     }); 

     // to prevent refreshing the whole page page 
     return false; 

    }); 
}); 
</script> 

<script> 
$(document).ready(function(){ 
    $('#sform').submit(function(){ 

     // show that something is loading 
     $('#txtHint').html("<b>Loading response...</b>"); 

     /* 
     * 'post_receiver.php' - where you will pass the form data 
     * $(this).serialize() - to easily read form data 
     * function(data){... - data contains the response from post_receiver.php 
     */ 
     $.ajax({ 
      type: 'POST', 
      url: 'show_lease_sub.php', 
      data: $(this).serialize() 
     }) 
     .done(function(data){ 

      // show the response 
      $('#txtHint').html(data); 

     }) 
     .fail(function() { 

      // just in case posting your form failed 
      alert("Posting failed."); 

     }); 

     // to prevent refreshing the whole page page 
     return false; 

    }); 
}); 

</script> 
+1

Там нет необходимости повторять всю функцию - вы можете просто сделать два последовательных AJAX звонки внутри одна функция. Однако нужно спросить, почему ваш скрипт serveride не обрабатывает всю необходимую обработку в одном скрипте? –

+0

Мне нужны две формы для работы отдельно. один отправляет данные, введенные в него, а другой - поле выбора Ajax, которое используется для отображения визуального представления аренды устриц. Этот флажок должен иметь возможность показывать любое количество различных договоров аренды в указанном div, и поэтому он разделен на основную форму. однако мне нужно, чтобы этот div обновлялся при отправке основной формы, чтобы отображать новые записи на дисплее. вот почему я сделал это так. Когда вы говорите «сделайте два последовательных звонка AJAX», вы имеете в виду данные, чтобы сказать data2? – Matt

+3

Предположительно, ваш второй PHP-скрипт опирается на данные, которые обновляются первыми. Если это так, вам не нужно отправлять данные во второй раз, но у вас есть условие гонки, так как вы эффективно отправляете сразу два запроса, и вы не можете быть уверены, что первый вызов AJAX будет завершен до второго вызова AJAX запрашивает новые данные. Либо ваш первый вызов должен обрабатывать обновления и возвращать новый набор данных (один вызов AJAX, один скрипт), либо второй вызов должен запускаться в методе '.done()' первого, чтобы гарантировать правильную последовательность. Здесь, кажется, больше, чем ваш вопрос. –

ответ

2

Лучшая практика будет обрабатывать оба вызова с одним фоновым скриптом. Вы можете вернуть 2 отдельных ответа, используя массив. Protip - напишите класс.

ajax.php

class leaseStuff{ 
    public static function moveToLease($data){ 
     // add code from move_to_lease.php, change $_POST to $data 
    } 
    public static function showLeaseSub($data){ 
     // add code from show_lease_sub.php, change $_POST to $data 
    } 
} 

echo json_encode(array(
    "moveToLease"=>leaseStuff::moveToLease($_POST), 
    "showLeaseSub"=>leaseStuff::showLeaseSub($_POST) 
)); 

Затем вы можете консолидировать Ajax в один вызов:

$.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: $(this).serialize() 
}).done(function(data){ 
    data = JSON.parse(data); 
    $('#response').html(data.moveToLease); 
    $('#txtHint').html(data.showLeaseSub); 
}); 
+0

Боюсь, что попробуем поблагодарить, потребуется некоторое время, чтобы обнять голову. Кажется, это решение im после. – Matt

+0

@Matt, вы можете в значительной степени скопировать ваши выходящие скрипты в функции класса, просто не эхо-html, а вместо этого верните его. –

+0

@Matt также, где бы он ни говорил «$ _POST», измените его на $ data. Кроме этого, просто скопируйте это слово в слово. Он должен работать нормально. –

0

Попробуйте перебором массива с вашими URL-адресов:

$('#sform').submit(function() { 
    var urls = [ 
        { 
         "url": "move_to_lease.php", 
         "response_id": "#response" 
        }, 
        { 
         "url": "show_lease_sub.php", 
         "response_id": "#txtHint" 
        } 
       ] 


    for (var k in urls) { 
     $(urls[k].response_id).html("<b>Loading response...</b>"); 

     $.ajax({ 
      type: 'POST', 
      url: urls[k].url, 
      data: $(this).serialize() 
     }).done(function (data) { 
      $(urls[k].response_id).html(data); 
     }).fail(function() { 
      alert("Posting failed."); 
     }); 
    } 

    return false; 

}); 

UPDATE:

на основе изображения вы предоставили IMAGE, вам нужно сделать две разные AJAX звонки.

  1. Когда форма будет отправлена: -> сохранить данные в БД -> получить информацию для обновления дисплея

  2. когда выберите выпадающий Изменено: -> получить информацию из БД -> получить информацию для обновления дисплея

+0

Извините, что, кажется, обновляет всю страницу, но затем ничего не делает. – Matt

+0

Попробуйте прямо сейчас, и дайте мне знать, что вы получаете – CodeGodie

+0

По-прежнему же жаль. – Matt

Смежные вопросы