2015-04-24 13 views
6

मैं कुछ पाठ प्राप्त करने के लिए AJAX के माध्यम से एक PHP-Script पर कुछ जानकारी भेज रहा हूं, जिसे प्रदर्शित किया जाना चाहिए। अभी तक कोई समस्या नहीं है। लेकिन यदि उपयोगकर्ता लॉग आउट हो गया है, तो परिणाम false होगा और लॉगिन-फॉर्म वाला एक मॉडल दिखाया जाएगा।लॉगिन के बाद AJAX अनुरोध दोहराएं

यदि उपयोगकर्ता लॉग इन हो जाता है, तो पहली जानकारी (var data) एक और बार भेजनी चाहिए, क्योंकि पहला प्रेषण स्वीकार नहीं किया गया था।

$.ajax({ 
url: "script.php", type: "POST", data: data, dataType: "json" 
}) 
.done(function(json) { 
    if (json.result === false) { 
     showModal("login"); return; 
    } 
    else { 
     $('#result').html(json.result); 
    } 
}); 

showModal समारोह भी एक ajax अनुरोध से जुड़ा है, इसलिए उपयोगकर्ता में ... उसके बाद पहली डेटा होना चाहिए एक बार भेज लॉग इन किया जा रहा है ...

function showModal() { 
    $('body').append('<form>...'); // Show Modal with form to login 
} 

// With submit form, the user will be logged in 
$('body').on('submit','#loginform',function(event){ 
$.ajax({ 
    url: "login.php", 
    type: "POST", 
    data: { 'username': username, 'password': password }, 
    dataType: "json" 
}) 
.done(function(json) { 
    // User is now logged in 
    // Now repeat first request 
}); 
}); 
+0

कोड है कि चालू होने वाले उपयोगकर्ता के लॉग इन करने के क्या से ajaxOptions पारित? – Kyojimaru

+0

अजेक्स कॉल को एक अलग फ़ंक्शन में लपेटें, और जब स्थिति विफल हो जाए तो इसे फिर से कॉल करें – wahwahwah

+0

यदि आप डेटा को स्टोर करना चाहते हैं तो आप उसे 'कुकी' या 'लोकल स्टोरेज' में संग्रहीत कर सकते हैं और फ़ंक्शन @ राफेलमुलर के लिए इसे एक पैरामीटर के रूप में उपयोग कर सकते हैं – empiric

उत्तर

4

रखें एक समारोह के अंदर आपका कोड। जब भी आप इसकी आवश्यकता है आप एक समारोह कॉल कर सकते हैं:

var sendData = function() { 
    $.ajax({ url: "script.php", type: "POST", data: data, dataType: "json" }) 
.done(function(json) { 
     if (json.result === false) { 
      showModal("login"); return; 
     } 
     else { 
      $('#result').html(json.result); 
     } 
    }); 
}; 

// now run sendData() when you want to trigger it 

sendData() कहाँ कॉल करने के लिए दूसरी बार कैसे अपनी प्रवेश (showModal) काम करता है पर निर्भर करता है। 'सफल लॉगिन' ईवेंट को पकड़ने का एक तरीका खोजें।


आप showModal कार्य करने के लिए sendData गुजरती हैं और यह वहाँ कॉल कर सकते हैं। इस तरह showModaldata बारे में कुछ पता करने की आवश्यकता नहीं:

var sendData = function() { 
    $.ajax({ url: "script.php", type: "POST", data: data, dataType: "json" }) 
.done(function(json) { 
     if (json.result === false) { 
      // The function sendData is passed as a parameter - will be called after a successful login 
      showModal("login", sendData); return; 
     } 
     else { 
      $('#result').html(json.result); 
     } 
    }); 
}; 

फिर, जहां showModal परिभाषित किया गया है:

function showModal(dialog, loginCallback) { 
    $('body').append('<form>...'); // Show Modal with form to login 
    // With submit form, the user will be logged in 
    $('#loginform').on('submit', function(event) { 
     $.ajax({ 
      url: "login.php", 
      type: "POST", 
      data: { 'username': username, 'password': password }, 
      dataType: "json" 
     }) 
     .done(function(json) { 
      // User is now logged in 
      // Now repeat first request 
      loginCallback(); 
     }); 
    }); 
} 
+0

कृपया अपडेट की गई पोस्ट पर एक नज़र डालें। इस प्रकार लॉगिन किया जाता है ... – user3142695

+0

ठीक है, तो आप 'doneData()' को फिर से 'कॉल' कॉलबैक के अंदर चलाने में सक्षम होना चाहिए। –

+0

मैंने यह दिखाने के लिए पोस्ट अपडेट किया कि मैं लॉगिन कैसे करता हूं। सोचो कि मैं इसे अनुकूलित कर सकता हूं ... – user3142695

1

आप ajax विकल्प के रूप में एक और तर्क को स्वीकार करने के ShowModal कार्य हो सकता है। अगर AJAX विकल्पों को परिभाषित किया गया है तो बस उन्हें पूरा करें।

function showLoginModal(ajaxOptions){ 
    $.ajax({ 
     url: "login.php", 
     type: "POST", 
     data: { 'username': username, 'password': password }, 
     dataType: "json" 
    }) 
    .done(function(json) { 
     if(ajaxOptions!== undefined){ 
      $.ajax(ajaxOptions); 
     } 
    }); 
} 

फिर अपने बुला समारोह

$.ajax({ 
url: "script.php", type: "POST", data: data, dataType: "json" 
}) 
.done(function(json) { 
    if (json.result === false) { 
     showLoginModal(this); 
    } 
    else { 
     $('#result').html(json.result); 
    } 
}); 
+0

तो मैं राफेल द्वारा दिखाए गए एक नए फ़ंक्शन 'sendData' को परिभाषित कर सकता हूं और उस फ़ंक्शन को' if (AJAXOptions! == अपरिभाषित) {'में कॉल करता हूं। सही? – user3142695

+0

यदि आपके पास केवल एक ही फ़ंक्शन है, तो भेजेंडेटा को इस कार्यक्षमता की आवश्यकता है तो इसे सीधे शोमोडाल के अंदर कॉल करना ठीक है।लेकिन अगर आपको कई या सभी अजेक्स कॉलों में एक ही चीज़ की ज़रूरत है तो मॉडल को दिखाने के लिए AJAX विकल्पों को पार करना बेहतर होगा और अगर स्थिति के अंदर $ .ajax (passOptions) का उपयोग करें। – wonderbell

+0

ठीक है, मैंने पोस्ट अपडेट किया है। क्योंकि शोमोडाल सिर्फ मोडल दिखाता है। मैं लॉगिन डेटा भेजने के लिए एक सबमिट घटना बांधता हूं। तो प्रक्रिया के बीच में modalShow() के साथ, मुझे नहीं पता कि डेटा कैसे कनेक्ट करें ... – user3142695

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