将数据发布到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
提交
取消