मुझे पता है कि यह गंभीर नेक्रोमेंसी है, लेकिन मुझे लगा कि मैं JSONP POST के कार्यान्वयन को jQuery का उपयोग करके पोस्ट करूंगा, जिसे मैं अपने JS विजेट के लिए सफलतापूर्वक उपयोग कर रहा हूं (यह ग्राहक पंजीकरण और लॉगिन के लिए उपयोग किया जाता है):
मूल रूप से, मैं एक IFrame दृष्टिकोण का उपयोग कर रहा हूं, जैसा कि स्वीकृत उत्तर में सुझाया गया है। अनुरोध भेजने के बाद मैं जो कुछ अलग कर रहा हूं, मैं वॉचिन हूं, अगर टाइमर का उपयोग करके फॉर्म को आइफ्रेम में पहुंचा जा सकता है। जब फॉर्म तक नहीं पहुंचा जा सकता है, तो इसका मतलब है कि अनुरोध वापस आ गया है। फिर, मैं ऑपरेशन की स्थिति के लिए क्वेरी करने के लिए एक सामान्य JSONP अनुरोध का उपयोग कर रहा हूं।
मुझे आशा है कि किसी को यह उपयोगी लगता है। > = IE8, क्रोम, फायरफॉक्स और सफारी में परीक्षण किया गया।
function JSONPPostForm(form, postUrl, queryStatusUrl, queryStatusSuccessFunc, queryStatusData)
{
var tmpDiv = $('<div style="display: none;"></div>');
form.parent().append(tmpDiv);
var clonedForm = cloneForm(form);
var iframe = createIFrameWithContent(tmpDiv, clonedForm);
if (postUrl)
clonedForm.attr('action', postUrl);
var postToken = 'JSONPPOST_' + (new Date).getTime();
clonedForm.attr('id', postToken);
clonedForm.append('<input name="JSONPPOSTToken" value="'+postToken+'">');
clonedForm.attr('id', postToken );
clonedForm.submit();
var timerId;
var watchIFrameRedirectHelper = function()
{
if (watchIFrameRedirect(iframe, postToken ))
{
clearInterval(timerId);
tmpDiv.remove();
$.ajax({
url: queryStatusUrl,
data: queryStatusData,
dataType: "jsonp",
type: "GET",
success: queryStatusSuccessFunc
});
}
}
if (queryStatusUrl && queryStatusSuccessFunc)
timerId = setInterval(watchIFrameRedirectHelper, 200);
}
function createIFrameWithContent(parent, content)
{
var iframe = $('<iframe></iframe>');
parent.append(iframe);
if (!iframe.contents().find('body').length)
{
//For certain IE versions that do not create document content...
var doc = iframe.contents().get()[0];
doc.open();
doc.close();
}
iframe.contents().find('body').append(content);
return iframe;
}
function watchIFrameRedirect(iframe, formId)
{
try
{
if (iframe.contents().find('form[id="' + formId + '"]').length)
return false;
else
return true;
}
catch (err)
{
return true;
}
return false;
}
//This one clones only form, without other HTML markup
function cloneForm(form)
{
var clonedForm = $('<form></form>');
//Copy form attributes
$.each(form.get()[0].attributes, function(i, attr)
{
clonedForm.attr(attr.name, attr.value);
});
form.find('input, select, textarea').each(function()
{
clonedForm.append($(this).clone());
});
return clonedForm;
}