通过ajax / jQuery向服务器发出ajax POST请求

时间:2012-05-15 18:48:45

标签: javascript jquery ajax cross-domain http-post

我正在尝试通过ajax将发布请求发送到另一个域并获得json响应。服务器位于我公司的前提下,通过日志,我可以看到它正在用json发送响应。

以下是我的尝试样本:

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)关于将脚本保留在标签中。这对我也没有用。我在这里做错了什么想法?

3 个答案:

答案 0 :(得分:1)

目前,通过Ajax将POST发送到另一个来源的唯一方法是服务器使用适当的CORS Allow-*标头进行响应:

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>
对于那些XMLHttpRequest Level 2XDomainRequest(IE8 / 9)的人来说,CORS也是limited in browser support

除此之外,您只能创建一个在浏览器和远程服务器之间进行协调的server-side proxy

答案 1 :(得分:0)

可以使用$ .post和$ .ajax发出POST请求。使用$ .ajax并提供成功的功能&#39;并且&#39;失败&#39;在&#39;错误&#39;函数读取错误消息。这应该可以让您了解ajax请求失败的原因。

我的猜测是ajax请求返回404错误..

P.S。 $ .get和$ .post是$ .ajax的简写版本..

答案 2 :(得分:0)

由于Same Origin Policy

,您无法对位于您网站(不同域名)之外的网页进行ajax调用

有一些解决方法available,包括使用JSONP作为数据类型。