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

标签 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) 阅读了有关将脚本保留在标记中的信息。这对我也没有用。知道我在这里做错了什么吗?

最佳答案

目前,通往POST的唯一途径通过 Ajax 到另一个来源是如果服务器响应适当的 CORS Allow-* header :

Access-Control-Allow-Origin: your.origin

如果没有这样的 header ,请求将被浏览器拒绝,原因是 Same-Origin Policy .

In your 1st example, it appears you're attempting to use JSONP (?callback=...). Such requests are strictly limited to GET as they are made by appending a new <script> element to the page rather than via 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在浏览器和远程服务器之间进行调解。

关于javascript - 通过 ajax/jQuery 向服务器发出 ajax POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606979/

相关文章:

jquery - 读取包含输入隐藏 jQuery 的 div 内容

JavaScript: return 表达式后的语句会被执行?

jquery - 如何在 jQuery Datatables 中添加对逗号分隔数字排序的支持?

javascript - 可拖动区域上的 Electron 上下文菜单

javascript - jQuery Ajax 无限滚动阅读 PHP

javascript - 是否可以使用 httpify 传递附加参数?

javascript - Ajax响应日期时间选择器点击事件未绑定(bind)

javascript - 如何在使用 ajax 更改事件对象后刷新 fullcalendar v4

javascript - hammer.js - 阻止拖动事件直到上一个事件结束

javascript - 使用 Angular Router 在组件内加载组件