Jquery ajax 不工作 - 没有“访问控制允许来源”
Posted
技术标签:
【中文标题】Jquery ajax 不工作 - 没有“访问控制允许来源”【英文标题】:Jquery ajax not working - No 'Access-Control-Allow-Origin' 【发布时间】:2015-09-21 15:56:13 【问题描述】:<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$( document ).ready(function()
$('#my-form')
.submit( function( e )
$.ajax(
url: 'http://111.111.111.111:5008/form',
type: 'POST',
data: new FormData( this ),
processData: false,
contentType: false,
success: function (data)
alert("SUCCESS");
,
error: function (textStatus, errorThrown)
alert("FAILED");
);
e.preventDefault();
)
);
</script>
</head>
<body>
<div>
<form id="my-form">
<div>
File:
<input type="file" name="file" />
</div>
<div>
<button type="submit">Submit</button>
</div>
</form>
</div>
</body>
</html>
我需要提交一个表单,看看是否成功。该文件正在我的服务器端上传并且没有错误,但 ajax 说它失败(显示失败警报)。我打开控制台,它给出了错误:
XMLHttpRequest cannot load http://111.111.111.111:5008/form. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://111.111.111.111' is therefore not allowed access.
所以表格正在上传,因为我可以看到它来自我的数据库。我用谷歌搜索了这个错误,似乎我可以在我的 ajax 中使用 jsonp 作为数据类型。我试过了,但它不起作用,但我宁愿不使用它来解决安全风险,我也不需要那种数据类型。
【问题讨论】:
我认为没有理由否决这个问题.. 嘿,伙计,我在您的代码中没有看到任何错误,我已经检查过了。提交后完美发布表单内容。我认为您的服务中存在问题,写在111.111.111.111:5008/form .. ajax 等待特定时间段的响应,如果它不会抛出错误事件....或者检查这个***.com/questions/15412226/… 你可能需要设置代理服务器以便将 ajax 调用重定向到实际服务器(您必须编写重写规则才能重定向)。Upvoted ;) 【参考方案1】:我找到了问题。从我的服务器返回的响应需要修改标头。标头需要允许所有来源。这是一个使用 Java (vertx.io) 的示例。
ctx.response().putHeader("Access-Control-Allow-Origin ", "*");
一旦我将它添加到我的服务器代码中,请求和响应就会根据需要工作。
【讨论】:
以上是关于Jquery ajax 不工作 - 没有“访问控制允许来源”的主要内容,如果未能解决你的问题,请参考以下文章
带有进度条的 jQuery ajax 上传 - 没有 flash