我很确定这有一个我遗漏的简单的解决方案。我有以下ajax脚本。
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function postForm() {
var ret = $('#test').val();
$.ajax({
type: 'POST',
url: 'http://10.0.0.8:9000/demo',
data: '{"name" : '+ret'}',
contentType: "application/json; charset=utf-8",
})
}
</script>
</head>
<body>
<form id="ajaxForm" onSubmit="postForm(); return false;" method="post">
<input id="test" type="text" name="name" value="Hello JSON" />
<input type="submit" value="Submit JSON" />
</form>
</body>
</html>我提取了id='test‘的输入值,将其放入ret变量中。然后,我尝试将其插入到data属性中,并通过ajax发送。我尝试了各种各样的引用,但似乎都不起作用……我做错了什么?
感谢前面的
发布于 2013-03-17 20:58:09
您似乎已经为AJAX脚本指定了一个绝对url:
http://10.0.0.8:9000/demo您似乎违反了内置在浏览器中的same origin policy,它阻止您发送跨域AJAX调用。
所以这个AJAX调用不能工作,除非这个超文本标记语言页面托管在http://10.0.0.8:9000上。
此外,您似乎有一个尾随的,,这将导致无效的javascript。我还将使用JSON.stringify方法将请求正确序列化到JSON:
function postForm() {
var ret = $('#test').val();
$.ajax({
type: 'POST',
url: '/demo',
data: JSON.stringify({ name: ret }),
contentType: 'application/json; charset=utf-8',
success: function(result) {
// do something iwth the result of the AJAX call here
}
});
}注意,我在这里使用了相对路径(url: '/demo')来确保不违反同源策略,并确保将AJAX请求发送到相同的域。
另一方面,如果您需要发送跨域AJAX调用,那么您有两种可能,包括使用JSONP (仅限于GET请求)或CORS,这两种方法都涉及到对服务器端API的修改。如果您无法控制您的服务器端API,并且无法对其进行修改,则必须在您的域(托管包含此javascript的HTML页面)上编写一个服务器端脚本,该脚本将充当您的域和远程域之间的桥梁/代理,然后将AJAX请求发送到您的服务器端脚本。
https://stackoverflow.com/questions/15460947
复制相似问题