2012-05-15 204 views
2

我想通過ajax發送一個post請求到另一個域並獲得json響應。服務器位於我公司的前提下,通過日誌,我可以看到它正在發送一個json響應。通過ajax/jQuery向服務器發送ajax POST請求

以下是我嘗試的一個樣本:

1)

function makeRequest(strURL){ 
    $.get(strURL+"?callback=rest.draw_table_dyn", "{}", 
    function(resp){ 
     rest.draw_table_dyn(resp); 
    }); 
} 

2)

xmlhttpPost : function(strURL) { 
var xmlHttpReq = false; 
var self = this; 
if (window.XMLHttpRequest) { 
    self.xmlHttpReq = new XMLHttpRequest(); 
    } 
else if (window.ActiveXObject) { 
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
self.xmlHttpReq.open('POST', strURL, true); 
self.xmlHttpReq.setRequestHeader("Content-Type", "application/json"); 
self.xmlHttpReq.onreadystatechange = function() { 
    rest.draw_table_dyn(self.xmlHttpReq.responseText); 
} 
self.xmlHttpReq.send(null); 
} 

然而,以下是我遇到的問題:

1)始終服務器被命中「OPTIONS」而不是「GET」或「POST」請求。我從這個鏈接(http://engin.bzzzt.biz/2010/01/25/cross-domain-xhr-access-control-preflight/)瞭解到,這是根據標準的預檢請求。

但是我可以做一個POST請求嗎?我嘗試使用$ .post,$ .ajax甚至$ .get,但無濟於事。

2)響應數據爲空。我需要數據用項目填充頁面。有沒有辦法讀取json?目前我只收到一個返回狀態爲0的空字符串。

我試過xmlHttpRequest,$ .ajax,$ .get和$ .post來發送請求並收到json無濟於事。

我在這裏閱讀(http://stackoverflow.com/questions/4221458/how-to-make-a-jsonp-call-to-an-api-using-jquery)關於在腳本中保留腳本。這也沒有爲我工作。任何想法我在這裏做錯了嗎?

+0

可能不是你正在尋找的,但是使用php的curl來打電話可能更簡單嗎? – MikeCruz13

+0

@ MikeCruz13我無法爲此使用它。但是,我會在使用PHP時接受您的建議。感謝您的建議。 – thiruvenkadam

回答

1

目前,只有這樣,才能POST通過Ajax的另一個原點如果服務器用適當的CORSAllow-*頭回應:

Access-Control-Allow-Origin: your.origin 

如果沒有這樣一個標題,請求將被瀏覽器拒絕因Same-Origin Policy

在你的第一個例子,它似乎您試圖使用JSONP(?callback=...)。這樣的請求被嚴格地限於GET,因爲它們是由通過一個新<script>元件附加到網頁,而不是經由XMLHttpRequest

<script src="http://remote.origin/resource?callback=rest.draw_table_dyn"></script> 

CORS也limited in browser support到那些與任一XMLHttpRequest Level 2XDomainRequest(IE8/9) 。

除此之外,您僅限於必須創建在瀏覽器和遠程服務器之間進行調解的server-side proxy

0

可以使用$ .post和$ .ajax創建一個POST請求。使用$ .ajax併爲'success'和'failure'提供函數。在'錯誤'功能中讀取錯誤信息。這應該爲您提供一個關於爲什麼ajax請求失敗的想法。

我的猜測是Ajax請求返回一個404錯誤..

附: $不用彷徨和$。員額是$就簡寫..

+0

Ajax請求總是成功返回。但是,響應狀態是0而不是200,並且通過響應沒有可見的json數據。 – thiruvenkadam

0

你不能讓一個AJAX調用頁面坐在你的網站外(不同領域),因爲Same Origin Policy

有一些解決方法包括使用JSONP作爲數據類型的available

+0

不幸的是,似乎jsonp不被服務器支持。我試着添加「?callback =?」與URL一起,仍然沒有任何運氣。 – thiruvenkadam

相關問題