簡體   English   中英

使用jQuery同步交叉子域POST請求

[英]Synchronous cross sub-domain POST request with jQuery

我正在嘗試執行跨域POST請求並且已經打了一個牆(或兩個)。

我無法在服務器上放置代理頁面 - 因此這不是一個選項。

我研究了getJSON,除了我需要POST不GET之外,它工作得很好。

是否有可能做到這一點? 如果不是 ,有人可以向我解釋getJSON如何工作以及為什么我不能做出替代方案。

不能使用XMLHttpRequest(aka AJAX)發出跨域請求(GET / POST /等)。

當服務器支持它時,您可以做的是發出JSONP請求。 JSONP請求的工作方式如下:

  • jQuery使用您提供的回調函數創建一個全局可訪問的函數作為參數
  • 而不是使用XMLHttpRequest(AJAX)來發出HTTP請求,jQuery動態地將SCRIPT標記插入到DOM中
  • 腳本標記的SRC是您嘗試與之通信的請求URL
  • jQuery向查詢字符串添加一個回調參數,如下所示:example.com/someurl.js?callback=someDynamicallyGeneratedMethodName
  • 然后由SERVER通過將JSON結果作為參數傳遞給someDynamicallyGeneratedMethodName來返回客戶端可以使用的JavaScript

如果您無法控制要發布的服務器,那么您運氣不佳,JSONP對您不會有太大幫助。 無論服務器返回什么都將在SCRIPT標記中,並且如果格式不正確,很可能會拋出錯誤。

有關這方面的更多信息,我建議您查看基本的$ .ajax函數而不是快捷方式。 (在Ajax下的jQuery文檔中。抱歉,我無法發布更多鏈接)

同樣,如果您無法控制要發布的服務器,則可能需要查看代理。 否則,IFRAME可能是您唯一的其他選擇。 還有一種方法可以使用SWF(flash)對象來實現此目的。 我既沒有嘗試過,但它們是XMLHttpRequest對象限制的解決方法。

希望我能幫忙!

你可以做一個帖子,但你想要的是一個JSONP請求來解決跨域問題。 本質上,您提供了一個回調函數,請求以腳本內容的形式返回,並使用請求中的JSON數據調用您的回調。 您的服務器端腳本需要使用圍繞JSON對象的回調函數將數據作為函數調用提供。

請參閱post功能的文檔。

$.post( '/example.com/controller/action?callback=?',
        { param: "data" }, 
        function(data) {
             ...do something with the data...
        }, 'jsonp' );

ASP.NET MVC對此的操作:

[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Action( string param, string callback )
{
     var jsonData = ...do something and construct some data in JSON...

     return Content( callback + "(" + jsonData + ");" );
}

如果你想要做的跨域POST那么最簡單的解決方案是提供一個在這里利瑪竇。 它對我很有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM