2010-03-05 6 views
7
$('#post_form').submit(function() { 
    $("#ajax_bar_loader").show(); 
    $.ajax({ 
     url: 'add.html', 
     data: $('#post_form').serialize(), 
     dataType: 'json', 
     type: 'post', 
     success: function(result) { 
      retVal = formCheck(result); 
     } 
    }); 

    return false; 
}); 

यही मेरा कोड जैसा दिखता है और "वापसी झूठी" के बजाय, मैं इसे "परिणाम" में निहित डेटा को अनुमति देना चाहता हूं। मैं यह कैसे हासिल कर सकता हूं?

उत्तर

3

आप इस तरह यह कर सकता है:

$.ajax({ 
    url: 'add.html', 
    data: $('#post_form').serialize(), 
    dataType: 'json', 
    type: 'post', 
    success: function(result) { 
     retVal = formCheck(result); 
     if(retVal) 
      $('#post_form').unbind('submit').submit(); 
     else 
      alert('Error with your form! Oh crap!'); 
    } 
}); 

जब से तुम वापस पोस्ट कर रहे हैं और छोड़ रहा है, यह सिर्फ अगर सफल इस हैंडलर unbinds और सामान्य रूप से होने सबमिट जब यह लागू की सुविधा देता है, तो कोड दौड़ता नहीं है और फिर से जांचता है, यह बस सबमिट करता है।

+0

jquery में आपको पहले अनबिंड करने की आवश्यकता है? यह किसी भी तरह से प्रस्तुत करेगा कि यह सही रूप से फॉर्म को फिर से जांचने से बर्बाद कर देगा? –

+0

@ जेफ - चूंकि यह सबमिट हैंडलर में होता है, इसलिए यदि आप नहीं करते हैं तो यह कोड फिर से चला जाएगा। –

+0

@ निक धन्यवाद, लेकिन यह तब भी सबमिट होगा जब वह वापसी झूठ चला रहा हो; सही बात? –

0
 
    success: function(result) { 
     ... 
     document.forms.post_form.submit(); 
    } 
2

मैं सामान्य फॉर्म जमा करने से रोकने के लिए ईवेंट हैंडलर के अंत में हमेशा false लौटने का सुझाव दूंगा। सबमिट करने से पहले हैंडलर निम्नलिखित $.ajax कॉल है पूरा करता निष्पादन अवास्तविक है, कोड के बाद से आग

$('#post_form').submit(function() { 
    $("#ajax_bar_loader").show(); 
    $.ajax({ 
     url: 'add.html', 
     data: $('#post_form').serialize(), 
     dataType: 'json', 
     type: 'post', 
     success: function(result) { 
      if(result == 'something') { 
       alert("some error happened"); 
      } else { 
       // assuming we're visiting the form's action 
       window.location.href = $(this).attr("action"); 
      } 
     } 
    }); 
    return false; 
}); 

सफलता कॉलबैक पर निर्भर: $.ajax को सफलता कॉलबैक के भीतर, आप सशर्त सर्वर से प्रतिक्रिया के आधार पर रीडायरेक्ट कर सकता है सफलता कॉलबैक निष्पादन से पहले मूल्यांकन किया जाने की संभावना है ($.ajax असीमित रूप से चलाएगा)।

+0

लेकिन क्या वास्तव में फॉर्म की कार्रवाई में कोई भी फॉर्म डेटा सबमिट नहीं करेगा? –

0

मुझे यकीन नहीं है कि यह आपकी समस्या के लिए काम करेगा, लेकिन क्या होगा यदि आपने AJAX अनुरोध को तुल्यकालिक बनाया है?

मुझे यह डमी कोड "काम" करने के लिए मिला है, यह AJAX अनुरोध को निकाल देता है और फिर एक बूलियन सेट करता है। फिर फॉर्म बूलियन के आधार पर सही या गलत लौटाता है:

$(document).ready(function() { 
    $('form').submit(function() { 
     var should_return = false; 
     $.ajax({ 
      async: false, 
      url: 'test.php', 
      type: 'post', 
      success: function() { 
       // Do some type of check 
       should_return = true; 
      } 
     }); 
     return should_return; 
    }); 
}); 
संबंधित मुद्दे

 संबंधित मुद्दे