我已成功发布数据,但我没有运气让我的.post响应处理程序代码正常运行。我在尝试的不同浏览器/工具中获得了不一致的结果。这是邮政编码:
$.post(form.attr("action"), form.serialize(), "json")
.done(function (response, textStatus, jqXHR) {
alert('done');
})
.fail(function (jqXHR, textStatus, errorThrown) {
// log the error to the console
alert('responsetext:' + jqXHR.responseText + ', status:' + textStatus + ', error:' + errorThrown);
})
在FireFox和Chrome中,它总是转到.fail(即使数据成功发布),但唯一的项目集是textStatus到“error”。在Firefox中,当我尝试查看响应时,它只显示错误,“SyntaxError:JSON.parse:第1行第1列意外的数据结束”。在Chrome中,在控制台中我看到:“XMLHttpRequest无法加载http://example.net/applicationsvc/formprocessor/index.php。请求的资源上没有”Access-Control-Allow-Origin“标头。因此,”http://example.net“来源是不允许访问。“这似乎非常相关,但我尝试解决它并没有奏效。
如何解决.post中的Access-Control-Allow-Origin问题?为什么我没有收到任何错误数据?为什么FireFox无法解析响应。
使用PostMan,并使用相同的标题和正文,我确实看到我的回复:
{"successful":true,"thankyou_message":"<h2>Thank you!<\/h2><p>Thank you for signing up!<\/p>"}
但是代码似乎没有得到或处理它。
以下是要发出的请求标头:
Host: example.net
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://example.net/mypage.htm
Content-Length: 655
Origin: http://example.net
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
更新: 我现在已经从.post切换到.ajax
了$.ajax({
url: form.attr("action"),
type: "POST",
data: form.serialize(),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function () {
alert('done');
}
});
我得到了一致的HTTP 501响应。
答案 0 :(得分:0)
如果您使用跨域,请尝试使用JSONP instea
您的代码
$.ajax({
url: form.attr("action"),
method: "POST",
headers: {"Access-Control-Allow-Origin":"*"},
data: form.serialize(),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function () {
alert('done');
}
});
将其更改为
$.ajax({
url: form.attr("action"),
type: "POST",
headers: {"Access-Control-Allow-Origin":"*"},
data: form.serialize(),
dataType: "jsonp",
contentType: "application/json; charset=utf-8",
success: function () {
alert('done');
}
});
答案 1 :(得分:0)
尝试在服务器上启用跨源,例如php
header("Access-Control-Allow-Origin: *");
服务器必须在响应标头中发送此信息,出于安全原因,请相应地将星标更改为您的域。