我正在尝试编写代码来发送jquery AJAX 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);
}
我正在关注我在这里看到的一些其他基本例子。虽然我在beforeSend事件中没有关于'xhr'变量的错误,但是在调用脚本时我在Complete中出现错误,说xhr未定义。
我确定我只是弄乱了一些简单的东西,但对Jquery,Ajax或javascript没有多少经验,我不知道是什么。
答案 0 :(得分:1)
我希望你对网址是第三方这个事实有疑问。
尝试在dataType: 'jsonp'
之后添加type: "POST"
。
此外,我不会使用'完整',而是使用'成功'和'错误':
[...]
type: "POST",
dataType: "jsonp",
data: createBody(searchTerm),
success: function(data) {
console.log(data);
}
error: function(data) {
console.error(data);
}
});
答案 1 :(得分:0)
为后来遇到此问题的人提供有趣的PSA。原来这个特殊的位是不可能的!无法向外部域发出POST
次请求,因为它违反了same-origin policy。可以使用GET
向外部域发出JSONP
个请求,但遗憾的是,无法通过客户端的POST进行此操作。
我见过的最好的解决方法(除了使用JSONP GET
请求之外,在我的情况下是不可能的)是将POST
请求发送到您自己的服务器,然后服务器发送请求外部域。