वॉयथोस और जोएल पुरा से ऊपर दिए गए दो उत्तरों का मिश्रण, मेरा सुझाव है कि आप तीसरे विकल्प पर भी विचार करें। नीचे मेरा मूल्यांकन है:
1) साइट पर मारने का अधिक आश्वासन तरीका यह है कि उपयोगकर्ता की जानकारी के वास्तविक जमा के लिए अपने एक्शन हैंडलर के हिस्से के रूप में सर्वर-साइड करना है।
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
"http://externalsite.com?id=12345&sessionid=abc123");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string result = reader.ReadToEnd();
// Process the response text if you need to...
}
यह आपके सर्वर अपने सर्वर को मारा और सुनिश्चित करें कि यह कहा जाता हो जाता है कि कर सकते हैं: यही कारण है कि आसानी से ऊपर voithos 'विधि के माध्यम से किया जा सकता है। इस दृष्टिकोण का नकारात्मक पक्ष यह है कि यह आपके सर्वर को द्वितीयक HTTP अनुरोध का ओवरहेड बनाता है। यदि दूसरा सर्वर धीमा है, तो यह अवरुद्ध करने वाला मुद्दा बना सकता है जो आपके अंत में स्पष्ट मंदता पैदा करेगा। आप बहु-थ्रेडेड/एसिंक जाकर इसे प्राप्त कर सकते हैं - लेकिन आपको तस्वीर मिलती है: यह आपके नियंत्रण से बाहर हल करने के लिए समस्याओं का एक गुच्छा पेश करता है - लेकिन - यह सुनिश्चित करता है कि आप जानते हैं कि रिमोट स्रोत मारा गया था या नहीं, और जवाब क्या था।
2) वैकल्पिक रूप से, यदि आपका उपयोगकर्ता वास्तविक पोस्ट कर रहा है और एक नए पृष्ठ के रूप में एक HTML प्रतिक्रिया वापस प्राप्त कर रहा है, तो आप उस परिणाम पृष्ठ के HTML में जोएल पुरा की प्रतिक्रिया को इंजेक्ट कर सकते हैं, जिससे उपयोगकर्ता के ब्राउज़र को हिट करने के लिए जिम्मेदार ठहराया जा सकता है रीमोट सर्वर।
<div style="display: none;">
<iframe src="http://externalsite.com?id=12345&sessionid=abc123"></iframe>
</div>
इस दृष्टिकोण का नकारात्मक पक्ष यह है कि अगर आदि, न केवल जो भी कारण अनुरोध को वापस ले अपने ग्राहक की आग और अगला पृष्ठ लोड होने के लिए इंतजार नहीं करता है, बाहरी साइट एक 404 त्रुटि लौटाता के लिए, बाहरी प्रसंस्करण नहीं किया जाता है - आपको नहीं पता होगा कि यह नहीं किया गया था।
3) यदि आपके पास अपनी प्रसंस्करण करने के लिए jQuery जैसी क्लाइंट-साइड लाइब्रेरी का उपयोग करने की क्षमता है, तो मैं सुझाव दूंगा कि आपके पास सभी फॉर्म सबमिशन इन-लाइन और असीमित रूप से होते हैं। दृष्टिकोण कुछ इस तरह होगा:
<script type="text/javascript">
$(document).bind('ready', function() {
$('#formSubmitButton').bind('click', function (ev) {
ev.preventDefault(); // These two lines stop the default processing from
ev.stopPropagation(); // occurring on form-submit (i.e. no full post-back)
// This line starts an asynchronous call to the server, posting your form
// data itself.
$.ajax({
url: '/My/Post/Url',
type: 'POST',
async: false,
// You could use a library for this kind of form parsing. I suggest
// http://www.json.org/js.html - for serialization, and
// http://code.google.com/p/form2js/ - for form conversion. It's great.
data: { my: 'form', data: 'fields' },
success: function (data) {
$.ajax({
url: '/The/External/Url',
type: 'POST',
async: false,
data: { external: 'data', goes: 'here' },
success: function (remoteData) {
if (remoteData) // validate response here
displaySuccess();
else
displayFailure();
},
error: displayFailure
});
},
error: displayFailure
});
});
});
</script>
इस विधि में - आप अपने खुद के सर्वर से पोस्ट करते हैं, और सफलता पर - तुरंत दूरस्थ सर्वर से एक दूसरे अनुरोध को वापस ले आग। हालांकि, चूंकि आप दूसरे अनुरोध को पहले से निकाल दिए जाने तक उपयोगकर्ता को सफलता/विफलता प्रदर्शित करने की प्रतीक्षा करते हैं - आप जानते हैं कि कम से कम यूआई परत पर, क्लाइंट को पृष्ठ छोड़ने के लिए ग्राहक को कतार मिलने से पहले दोनों अनुरोध किए गए हैं।
तो - शायद एक कार्य प्रवाह और ओवरहेड परिप्रेक्ष्य से सुरक्षित है - हालांकि, आपको जावास्क्रिप्ट में कुछ यूआई स्तर तर्क लिखने की आवश्यकता है, जो आपकी परियोजना के आधार पर समस्याग्रस्त हो सकती है।
क्या आपको इसे लाने के लिए * उपयोगकर्ता का ब्राउज़र * चाहिए, या आप इसे अपने सर्वर से कर सकते हैं? –