AJAX का उपयोग करके फ़ॉर्म को कैसे सत्यापित और जमा करें?


12

मैंने फॉर्म एपीआई का उपयोग करके एक वेबफॉर्म बनाया है। मैं #AJAXप्रत्येक क्षेत्र में AJAX सत्यापन को जोड़ने के लिए फ़ील्ड विकल्प का उपयोग कर रहा हूं ।

क्या पेज को फिर से लोड किए बिना AJAX का उपयोग करके फॉर्म को सत्यापित और सबमिट करना संभव है। यदि सत्यापन विफल हो जाता है तो मैं एक त्रुटि संदेश दिखाना चाहता हूं और यदि सत्यापन सफल होता है तो मैं एक संदेश दिखाना चाहता हूं (आदर्श रूप से एक लाइटबॉक्स में) और प्रपत्र फ़ील्ड रीसेट करें।

मेरा कोड अब तक:

$form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
    '#default_value' => '',
    '#maxlength' => '128',
    '#required' => TRUE,
    '#ajax' => array(
        'callback' => '_validate_name',
        'wrapper' => 'name-error-icon-container',
        'method' => 'html',
        'effect' => 'none',
        'progress' => array(
            'message' => NULL,
        ),
    ),
);

$form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
    '#ajax' => array(
        'callback' => '_handle_form_submit',
        'effect' => 'fade',
    ),
);

कॉलबैक फ़ंक्शंस इस तरह दिखते हैं:

function _validate_name($form, $form_state) {

    if ($form_state['values']['name'] != '') {
    $output = 'OK';
    }
    else {
      $output = 'Enter a value';
    }

   return $output;

}

function _handle_form_submit($form, $form_state) {
}

लेकिन मुझे यकीन नहीं है कि _handle_form_submitफ़ंक्शन को मान्य करने के लिए क्या जाना चाहिए और फिर या तो एक संदेश वापस करना चाहिए या फ़ॉर्म सबमिट करना और फ़ील्ड रीसेट करना चाहिए?

जवाबों:


-2

उदाहरण मॉड्यूल एक ajax फार्म का है कि आप के रूप में कई अन्य लोगों के रूप में अच्छी तरह का उल्लेख कर सकते हैं। यहां कोड रिपॉजिटरी में ajax फॉर्म उदाहरण के लिए एक लिंक है, लेकिन मैं सुझाव देता हूं कि किसी भी तरह कार्यान्वयन को देखने के लिए डाउनलोड करें।


1
क्षमा करें - मुझे उदाहरण मॉड्यूल में अंजाइक मान्यता के कोई भी उदाहरण नहीं मिल सकते हैं
ErichBSchulz

हाँ, यह एक फूला हुआ जवाब है। मुझे वास्तव में वहां कोई मान्यता नहीं दिखती है। प्रत्येक कॉलबैक बस फॉर्म लौटाता है।
AlxVallejo 14

2
यह स्वीकृत उत्तर कैसे है? यह भी नहीं बताया गया है कि दिए गए लिंक में कहाँ देखना है (और लिंक के पास वैसे भी सत्यापन उदाहरण नहीं है)।
रॉबिनमित्र

Ajax फॉर्म उदाहरण के लिए नया लिंक: cgit.drupalcode.org/examples/tree/ajax_example/…
Brentg

मैंने अपना उत्तर एक विकी बना दिया, क्योंकि यह स्वीकार किया जाता है, लेकिन खराब गुणवत्ता वाला है
रॉकटेकरबक

11

मुझे पता है कि यह सवाल अब तक एक-दो साल से पड़ा हुआ है, लेकिन मुझे नहीं लगता कि वास्तव में ड्रुपल 7 एजैक्स फॉर्म सबमिट करने का कोई अन्य जवाब मिलता है, इसलिए मैं इसे समझाने की कोशिश करूंगा।

अपने फॉर्म को अच्छी तरह से काम के बिना ajax के रूप में अच्छी तरह से काम करना चाहिए, आपके ajax सबमिट हैंडलर को कुछ नहीं करना चाहिए लेकिन फॉर्म को वापस करना चाहिए। बाकी सब कुछ आपके सत्यापन में होना चाहिए और कार्य प्रस्तुत करना चाहिए।

function ex_form($form, $form_state) {
  $form['name'] = array(
    '#type' => 'textfield',
     '#title' => t('Name'),
     '#default_value' => '',
     '#maxlength' => '128',
     '#required' => TRUE,
  );

  $form['submit'] = array(
   '#type' => 'submit',
   '#value' => 'Submit',
   '#ajax' => array(
     'callback' => 'ex_form_ajax_handler',
     'effect' => 'fade',
   ),
  );
}

function ex_form_submit(&$form, &$form_state) {
  // Submit logic - runs when validation is ok
  // You can alter the form here to be just a markup field if you want.
}

function ex_form_validate(&$form, &$form_state) {
  // Validation logic - invalidate using form_set_error() or form_error()
}

function ex_form_ajax_handler(&$form, &$form_state) {
  return $form;
}

शायद सबसे अच्छा जवाब
एंड्रयू Kozoriz

क्या आप यह कह रहे हैं कि सबमिट बटन पर मान्य और सबमिट करने के तरीके स्वतः AJAX कॉलबैक के लिए कहे जाएंगे? किस क्रम में विधियों को बुलाया जाता है?
जेफ

3

मुझे लगता है कि 17 अक्टूबर को maxtorete द्वारा पोस्ट, 2011 का उपयोग कर एक समग्र उदाहरण दे रहा है दोनों form_validate()औरform_submit()

(मैंने अभी तक इसका परीक्षण नहीं किया है)

इसके अलावा स्टैक ओवरफ्लो पर जोशुआ स्टीवर्सन के जवाब का एक अच्छा काम उदाहरण है:

function dr_search_test_form($form, &$fstate) {

  $form['wrapper'] = [
    '#markup' => '<div id="test-ajax"></div>',
  ];

  $form['name'] = [
    '#type'     => 'textfield',
    '#required' => TRUE,
    '#title'    => 'Name',
  ];

  $form['submit'] = [
    '#type'  => 'submit',
    '#value' => 'Send',
    '#ajax'  => [
      'callback' => 'dr_search_test_form_callback',
      'wrapper'  => 'test-ajax',
      'effect'   => 'fade',
    ],
  ];

  return $form;
}

function dr_search_test_form_callback($form, &$fstate) {

  return '<div id="test-ajax">Wrapper Div</div>';
}

function dr_search_test_form_validate($form, &$fstate) {

  form_set_error('name', 'Some error to display.');
}

जोशुआ यह संकेत देता है कि सत्यापन त्रुटि संदेश #ajax['wrapper']तत्व को पूरी तरह से बदल देता है इसलिए आपके कॉलबैक को इस तत्व को फिर से बदलने की आवश्यकता है क्योंकि आप इसे बदलते हैं।


जब वह लिंक अमान्य हो जाता है तो यह एक संकेत है कि प्रश्न अब प्रासंगिक नहीं है!
ErichBSchulz

2
डाउन वोट थोड़ा कठोर है - भले ही यह केवल एक लिंक था - यह उत्तर के लिए एक लिंक था - केवल एक मॉड्यूल के लिए लिंक नहीं है जिसका उत्तर नहीं है - स्वीकृत उत्तर के विपरीत !! वैसे भी मुझे कुछ काम करने का कोड प्रदान किया गया था जबकि मुझे नीचा दिखाया जा रहा था।
ErichBSchulz

धन्यवाद @ mbomb007 - अभी तय हुआ
ErichBSchulz

2

सामान्य तौर पर, सत्यापन और फ़ॉर्म सबमिशन हैंडलिंग सामान्य _validate () और _submit () कॉलबैक में होनी चाहिए। विचार यह है कि रूपों को अभी भी अजाक्स के बिना काम करना चाहिए।

बहुत ज्यादा एकमात्र बात यह है कि #ajax कॉलबैक करना चाहिए कि परिभाषित आवरण के अनुसार फॉर्म का हिस्सा वापस किया जाना चाहिए।


2
अपने शब्दों को लेकर सावधान रहें। कॉलबैक को WHOLE FORM को वापस करना चाहिए, form_state से पुनर्निर्माण किया जाना चाहिए। फॉर्म का रिटर्निंग पार्ट सबसे बड़ी Drupal / AHAH गलत धारणा है। Katbailey.net/blog/ahah-drupal-may-it-one-day-live-its-acronym देखें ।

7
यह सवाल Drupal 7 के बारे में है ... AHAH अब Drupal में मौजूद नहीं है। #ajaxDrupal 7 में एक कॉलबैक फ़ंक्शन में आप केवल उस फॉर्म का हिस्सा लौटाते हैं जिसे आप बदलना चाहते हैं।
क्लाइव

1
@ChrisD। जैसा कि क्लाइव ने उल्लेख किया है, यह ड्रुपल 7 है और हमारे पास अब काफी अच्छा अजाक्स फ्रेमवर्क है जो सभी प्रकार के फैंसी सामानों को करने की अनुमति देता है जैसे कि कई अलग-अलग फॉर्म पार्ट्स और इतने पर वापस आना।
बेर्डिर

@Clive मैं एक और अजाक्स संबंधित समस्या drupal.stackexchange.com/a/142316/19205 पर आया था, जहां लेखक ने उल्लेख किया था कि "आइटम को बदलने के बाद फॉर्म को फिर से बनाने की जरूरत है" जो कि d7 के लिए भी है। मैं उलझन में हूँ, कौन सा कथन सही है (यह बहस किए बिना कि कौन सही है :-))। क्या आप कृपया इस पर कुछ जानकारी साझा कर सकते हैं?
किरणिंग

0

इसके दो तरीके हैं

1)

function abc_form_validate(&$form, &$form_state) {
  // Validation logic - invalidate using form_set_error() or form_error()
}

function abc_form_ajax_handler(&$form, &$form_state) {
  return $form;
}

2) उदाहरण मॉड्यूल http://cgit.drupalcode.org/examples/tree/ajax_example/ajax_example.module?id=refs/heads=id2=7.x-1.x#l402


अब मैं नहीं जानता कि आपका उत्तर कितना सही है, लेकिन इसके प्रारूपण में निश्चित रूप से सुधार की आवश्यकता है (यदि आप नहीं चाहते कि इसे मध्यस्थों द्वारा हटाया जाए)। यदि आवश्यक हो, तो सहायता पृष्ठ की जाँच करें, या बस कुछ wysiwyg संपादक बटन का उपयोग करें कम से कम अपने कोड को ... कोड के रूप में चिह्नित करें।
पियरे.विरेंस

गैर-सही स्वरूपित कोड किसी उत्तर को हटाने का कारण नहीं है। इसे ठीक करने के लिए बस एक उपयोगकर्ता को संपादित विशेषाधिकार की आवश्यकता होती है।
kiamlaluno

यहाँ मैं आया हूँ, हताश, एक समाधान की तलाश में, इस उत्तर के केवल 2 साल बाद, एक लिंक पर क्लिक किया जो मुझे एक गैर-मौजूदा पेड़ / शाखा की ओर ले जाता है। कृपया उत्तर पर लिंक का उपयोग न करें, या यदि आप लेखन के समय सामग्री पेस्ट करते हैं।
मैक

0

मेरे मामले में, एक submitप्रकार का उपयोग करने से फ़ॉर्म हमेशा सबमिट होता है, इसलिए मैंने इसे निर्दिष्ट के buttonसाथ बदल दिया #ajax। फिर, मुझे अजाक्स कॉलबैक में अपना सत्यापन करना पड़ा।

मैं एक ctools फलक बना रहा था; मुझे नहीं पता कि क्या इसमें खेलता है।

function mymodule_form($form, &$form_state) {
  ...
  $form['button'] = array(
    '#type' => 'button',
    '#value' => t('Subscribe'),
    '#ajax' => array(
      'callback' => '_mymodule_ajax',
    ),
  );
  return $form;
}

function _mymodule_ajax($form, &$form_state) {
  if ( ! valid_email_address($form_state['values']['email']) ) {
    form_set_error($form, t('Please enter a valid email address.'));
  } else {
    $form = array(
      '#markup' => t('You have subscribed.'),
    );
  }
  return $form;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.