javascript
  • jquery
  • html
  • ajax
  • validation
  • 2014-10-25 5 views 0 likes 
    0

    Привет Я пытаюсь сделать HTML-форму и должен проверить ее перед выполнением действия формы. Но ответ AJAX всегда возвращает пустое сообщение?jQuery Ответ AJAX всегда возвращает пустое сообщение

    $(function(){ 
        $("#ajax-payment-form input[type='submit']").click(function(e) { 
    
         // Prevent form submission 
         e.preventDefault(); 
    
         // Serialize data, make AJAX call 
         var str = $(this).serialize(); 
         $.ajax({ 
          type: "POST", 
          url: templateDir+"/payment_form/payment_process.php", 
          data: str, 
          context: this 
         }).done(function(msg) { 
    
          if(msg == 'OK') { 
           console.log('Validation passed, will submit form'); 
           $(this).closest('form').submit(); 
          } else { 
           console.log(msg); 
          } 
    
         }).fail(function() { 
          // Catch ajax errors here 
          console.log('AJAX error'); 
         }); 
        });               
    }); 
    

    PHP:

    $post = (!empty($_POST)) ? true : false; 
    if ($post) { 
        $orderid = stripslashes($_POST['orderid']); 
        $amount = stripslashes($_POST['amount']); 
        $betingelser = stripslashes($_POST['betingelser']); 
        $error = ''; // Check ordreid 
        if (!$orderid) { 
        $error. = 'Venligst indtast dit ordreid.<br />'; 
        } // Check amount 
        if (!$amount) { 
        $error. = 'Venligst indtast et beløb.<br />'; 
        } 
        if (!$error) { 
        echo 'OK'; 
        } else { 
        echo '<div class="notification_error">'.$error. 
        '</div>'; 
        } 
    } 
    

    Может кто-нибудь сказать мне, что случилось?

    +0

    вы можете показать мне свой код PHP для payment_process.php –

    +0

    успеха является устаревшим? – thar

    +0

    @AbdulBasit yes here: $ post = (! Empty ($ _ POST))? true: false; if ($ post) { \t $ orderid = stripslashes ($ _ POST ['orderid']); \t $ amount = stripslashes ($ _ POST ['amount']); \t $ betingelser = stripslashes ($ _ POST ['betingelser']); \t $ error = ''; \t // Проверка ordreid \t если (! $ OrderID) \t { \t $ ошибка. = «Venligst indtast ДИТ ordreid.
    '; \t} \t // Проверить количество \t если (! $ Сумма) \t { \t $ ошибка. = «Venligst indtast и др beløb.
    '; \t} \t если ($ ошибка!) \t { \t \t эхо 'OK'; \t} \t еще \t { \t \t эхо '

    '.$error.'
    '; \t} } – thar

    ответ

    -2

    попробовать это в JQuery:

    $.ajax({ 
    type: "POST", 
    url: templateDir+"/payment_form/payment_process.php", 
    data: str, 
    context: this, 
    success: function(msg){ 
    if(msg == 'OK') { 
        console.log('Validation passed, will submit form'); 
        $(this).closest('form').submit(); 
        } 
    else { 
        console.log(msg); 
    } 
    } 
    error: function(msg){ 
    // if call fails or any error occurs 
    } 
    }); 
    
    +0

    Нет ничего плохого в том, что вы используете обратные вызовы done/fail по обещанию, возвращенному '$ .ajax'. Как правило, гораздо лучше работать, чем передавать эквивалентные обратные вызовы/ошибки. – meagar

    1

    Вы находитесь в click обработчика кнопки submit. Вы звоните $(this).serialize(), где this - это кнопка отправки. Вызов сериализации в кнопке отправки приведет к возврату пустой строки.

    Итак, вы не передаете какие-либо данные на сервер. Первое, что вы делаете на стороне сервера, это проверить empty($_POST), который он будет, поэтому if ($post) является ложным, и ни один из ваших серверных кодов не выполнен.

    Вам необходимо сериализовать форму, а не кнопку отправки.

    Простым решением было бы сериализовать саму форму ....

    str = $('"#ajax-payment-form').serialize() 
    

    , но на самом деле, тем больше проблема заключается в том, что вы связываете с click на кнопку отправки, а не к submit событие на самой форме.

    Вместо этого довольно запутанного способ обработки формы представляет ...

    $("#ajax-payment-form input[type='submit']").click(function(e) { 
    

    Просто сделай это:

    $("#ajax-payment-form").submit(function (e) { 
    
    +0

    Проблема в том, что при этом создается бесконечный цикл. log (1223) Принятая проверка, будет отправлять форму. (1223) быстро подсчитывается. При установке str = $ ('"# ajax-payment-form'). Serialize() у меня есть правильный ответ, бот действие не выполняется – thar

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

    • Нет связанных вопросов^_^