2012-05-15 205 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

相关问题