我正在尝试发送 ajax 调用。我使用了名为 Postman
的 Chrome REST 测试扩展 [Link to it] 。当我使用扩展名发送调用时,它可以工作,但是当我通过 jQuery 发送它时,它不起作用,并且我收到一条错误消息:“错误 0”。
这是Postman工具发送到服务器的请求:
POST /form/front HTTP/1.1
Host: go.com
Cache-Control: no-cache
{ "sitename": "AAGx", "zone": 12, "sector": 34, "square": 7}
这是我向服务器发送请求的代码:
function insert_newform() {
form_data = {sitename: 'AAGx', zone: 12, sector: 34, square: 7}
$.ajax({
type: "POST",
url: 'http://go.com/form/front',
data: JSON.stringify(form_data),
success: function(result) { alert("good!") },
error: function(jqXHR, textStatus, errorThrown) { alert(textStatus) }
});
}
$("#show").click(function() {
insert_newform()
}
);
我无法找出我的通话出了什么问题!
编辑:go.com 只是一个例子!
EDIT2:我要疯了。
Edit3:我更新了代码以添加 JSON.stringify()
Edit4:当我将文件放在服务器上并运行脚本时,它工作得很好,一切都很好!但是,当我在计算机上本地运行这些文件时,调用不起作用,并且出现该错误。我真的要疯了!我不知道出了什么问题:(
Edit5:也许这与 CORS 这个东西有关?但是为什么它可以在 Chrome 插件中运行,但不能在本地脚本中运行?!!
最佳答案
如果您的 data
属性是 JavaScript 对象,jQuery 会将其转换为表单数据进行传输。 postman 可能将其作为实际字符串发送。尝试将您的数据
括在单引号中:
data: '{"sitename": "AAGx", "zone": 12, "sector": 34, "square": 7}', ...
编辑:根据您的编辑,我几乎可以向您保证这是一个 CORS(跨源资源共享)问题。 AJAX 和 JavaScript 通常受到各种安全限制。限制 JavaScript 能力的最核心的安全概念之一是 Same Origin Policy 。这个想法是为了防止 XSS ( cross-site scripting ) 攻击。
jQuery的AJAX函数will give an error code of 0 if it experiences CORS issues .
有关于how local files are under more strict security constraints here的详细解答这完美地解释了你的情况。
您的解决方案是发送 Access-Control-Allow-Origin
来自服务器的 header (如果您可以控制服务器)。否则,您可以尝试使用 JSONP,它不使用 XMLHTTPRequest
对象,并且不受相同安全约束的约束。
关于javascript - 使用 REST 发送 ajax 请求可以,但不能使用 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810559/