亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數據發布到JSONP

將數據發布到JSONP

將數據發布到JSONP是否有可能將數據發布到JSONP?還是所有數據都必須以GET請求的形式在查詢字符串中傳遞?我有很多數據需要發送到服務,跨域,而且它太大了,無法通過querystring發送。有什么辦法可以繞過這件事?
查看完整描述

3 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

如果您需要跨域發送大量數據。我通常創建一個您可以分兩個步驟調用的服務:

  1. 首先,客戶端進行表單提交(POST允許跨域)。服務將輸入存儲在服務器上的會話中(使用GUID作為鍵)。(客戶端創建GUID并將其作為輸入的一部分發送)

  2. 然后,客戶端執行一個普通腳本-Injection(JSONP)作為參數,您使用與表單POST中使用的相同的GUID。服務處理來自會話的輸入,并以正常的JSONP-方式返回數據。在此之后,會話將被銷毀。

當然,這依賴于您編寫服務器后端。


查看完整回答
反對 回復 2019-07-02
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

我知道這是嚴重的亡靈,但我想我應該使用jQuery發布JSONP POST的實現,我正在成功地將它用于JS小部件(用于客戶注冊和登錄):

基本上,我使用的是iframe方法,正如公認的答案中所建議的那樣。不同的是,在發送請求之后,我正在觀察,如果可以使用計時器在iframe中到達表單。當無法到達表單時,這意味著請求已返回。然后,我使用一個普通的JSONP請求來查詢操作的狀態。

我希望有人發現它有用。在>=IE8、Chrome、Firefox和Safari中進行測試。

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;}


查看完整回答
反對 回復 2019-07-02
  • 3 回答
  • 0 關注
  • 459 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號