将数据发布到JSONP是否有可能将数据发布到JSONP?还是所有数据都必须以GET请求的形式在查询字符串中传递?我有很多数据需要发送到服务,跨域,而且它太大了,无法通过querystring发送。有什么办法可以绕过这件事?
3 回答
达令说
TA贡献1821条经验 获得超6个赞
首先,客户端进行表单提交(POST允许跨域)。服务将输入存储在服务器上的会话中(使用GUID作为键)。(客户端创建GUID并将其作为输入的一部分发送) 然后,客户端执行一个普通脚本-Injection(JSONP)作为参数,您使用与表单POST中使用的相同的GUID。服务处理来自会话的输入,并以正常的JSONP-方式返回数据。在此之后,会话将被销毁。
慕虎7371278
TA贡献1802条经验 获得超4个赞
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 markupfunction 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;}添加回答
举报
0/150
提交
取消
