我正试图编写代码来发送jquery AJAX POST请求,但在模拟我看到的一些示例时遇到了一些问题。
我想向第三方网站发送一个post请求,然后调用一个函数,将responseText写入div,这是非常基本的东西。
function addSearch(searchTerm) {
$.ajax({
accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
url: "http://www.website.com",
contentType: "application/x-www-form-urlencoded",
beforeSend : function (xhr) {
xhr.setRequestHeader("AcceptLanguage", "en-US,en;q=0.5");
xhr.setRequestHeader("AcceptEncoding", "gzip, deflate");
},
type: "POST",
data: createBody(searchTerm),
complete: doStuffOnComplete(xhr, status)
});
}
function doStuffOnComplete(xhr, status) {
var response = xhr.responseText;
$("#content").append(response);
}
下面是我在这里看到的其他一些基本例子。虽然我在beforeEnd事件中没有得到关于"xhr"变量的错误,但当调用脚本时,我在Complete中得到了一个错误,说xhr是未定义的。
我确信我只是把一些简单的事情搞砸了,但我对Jquery、Ajax或javascript没有太多经验,我不确定是什么。
我想你会对url是第三方这一事实有问题。
尝试在type: "POST"
之后添加dataType: 'jsonp'
。
此外,我不会使用"完成",而是使用"成功"one_answers"错误":
[...]
type: "POST",
dataType: "jsonp",
data: createBody(searchTerm),
success: function(data) {
console.log(data);
}
error: function(data) {
console.error(data);
}
});
对于以后遇到此问题的人来说,这是一个有趣的PSA。原来这一点是不可能的!无法向外部域发出POST
请求,因为它违反了同源策略。可以使用JSONP
向外部域发出GET
请求,但遗憾的是,无法通过客户端的POST来实现这一点。
我讨论过的最好的解决方法(除了使用JSONP GET
请求,在我的情况下这是不可能的)是将POST
请求发送到您自己的服务器,然后服务器将请求发送到外部域。