将数据发布到JSONP

将数据发布到JSONP

是否有可能将数据发布到JSONP?还是所有数据都必须以GET请求的形式在查询字符串中传递?

我有很多数据需要发送到服务,跨域,而且它太大了,无法通过querystring发送。

有什么办法可以绕过这件事?


宝慕林4294392
浏览 410回答 3
3回答

达令说

如果您需要跨域发送大量数据。我通常创建一个您可以分两个步骤调用的服务:首先,客户端进行表单提交(POST允许跨域)。服务将输入存储在服务器上的会话中(使用GUID作为键)。(客户端创建GUID并将其作为输入的一部分发送)然后,客户端执行一个普通脚本-Injection(JSONP)作为参数,您使用与表单POST中使用的相同的GUID。服务处理来自会话的输入,并以正常的JSONP-方式返回数据。在此之后,会话将被销毁。当然,这依赖于您编写服务器后端。

慕虎7371278

我知道这是严重的亡灵,但我想我应该使用jQuery发布JSONP POST的实现,我正在成功地将它用于JS小部件(用于客户注册和登录):基本上,我使用的是iframe方法,正如公认的答案中所建议的那样。不同的是,在发送请求之后,我正在观察,如果可以使用计时器在iframe中到达表单。当无法到达表单时,这意味着请求已返回。然后,我使用一个普通的JSONP请求来查询操作的状态。我希望有人发现它有用。在>=IE8、Chrome、Firefox和Safari中进行测试。function&nbsp;JSONPPostForm(form,&nbsp;postUrl,&nbsp;queryStatusUrl,&nbsp;queryStatusSuccessFunc,&nbsp;queryStatusData){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpDiv&nbsp;=&nbsp;$('<div&nbsp;style="display:&nbsp;none;"></div>'); &nbsp;&nbsp;&nbsp;&nbsp;form.parent().append(tmpDiv); &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;clonedForm&nbsp;=&nbsp;cloneForm(form); &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;iframe&nbsp;=&nbsp;createIFrameWithContent(tmpDiv,&nbsp;clonedForm); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(postUrl) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clonedForm.attr('action',&nbsp;postUrl); &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;postToken&nbsp;=&nbsp;'JSONPPOST_'&nbsp;+&nbsp;(new&nbsp;Date).getTime(); &nbsp;&nbsp;&nbsp;&nbsp;clonedForm.attr('id',&nbsp;postToken); &nbsp;&nbsp;&nbsp;&nbsp;clonedForm.append('<input&nbsp;name="JSONPPOSTToken"&nbsp;value="'+postToken+'">'); &nbsp;&nbsp;&nbsp;&nbsp;clonedForm.attr('id',&nbsp;postToken&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;clonedForm.submit(); &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;timerId; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;watchIFrameRedirectHelper&nbsp;=&nbsp;function() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(watchIFrameRedirect(iframe,&nbsp;postToken&nbsp;)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(timerId); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpDiv.remove(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;&nbsp;queryStatusUrl, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;queryStatusData, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType:&nbsp;"jsonp", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;"GET", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;queryStatusSuccessFunc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(queryStatusUrl&nbsp;&&&nbsp;queryStatusSuccessFunc) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timerId&nbsp;=&nbsp;setInterval(watchIFrameRedirectHelper,&nbsp;200);}function&nbsp;createIFrameWithContent(parent,&nbsp;content){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;iframe&nbsp;=&nbsp;$('<iframe></iframe>'); &nbsp;&nbsp;&nbsp;&nbsp;parent.append(iframe); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!iframe.contents().find('body').length) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//For&nbsp;certain&nbsp;IE&nbsp;versions&nbsp;that&nbsp;do&nbsp;not&nbsp;create&nbsp;document&nbsp;content... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;doc&nbsp;=&nbsp;iframe.contents().get()[0]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.open(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.close(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;iframe.contents().find('body').append(content); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;iframe;}function&nbsp;watchIFrameRedirect(iframe,&nbsp;formId){ &nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(iframe.contents().find('form[id="'&nbsp;+&nbsp;formId&nbsp;+&nbsp;'"]').length) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(err) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;}//This&nbsp;one&nbsp;clones&nbsp;only&nbsp;form,&nbsp;without&nbsp;other&nbsp;HTML&nbsp;markupfunction&nbsp;cloneForm(form){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;clonedForm&nbsp;=&nbsp;$('<form></form>'); &nbsp;&nbsp;&nbsp;&nbsp;//Copy&nbsp;form&nbsp;attributes &nbsp;&nbsp;&nbsp;&nbsp;$.each(form.get()[0].attributes,&nbsp;function(i,&nbsp;attr) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clonedForm.attr(attr.name,&nbsp;attr.value); &nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;form.find('input,&nbsp;select,&nbsp;textarea').each(function() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clonedForm.append($(this).clone()); &nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;clonedForm;}
打开App,查看更多内容
随时随地看视频慕课网APP