如何将请求数据传递到 JQuery.ajax 中的 Complete 事件中
Posted
技术标签:
【中文标题】如何将请求数据传递到 JQuery.ajax 中的 Complete 事件中【英文标题】:How do I pass request data into the Complete event in JQuery.ajax 【发布时间】:2013-08-18 03:17:04 【问题描述】:我正在尝试编写代码来发送 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 没有太多经验,我不确定是什么。
【问题讨论】:
【参考方案1】:我预计您对 url 是第三方的事实有疑问。
尝试在type: "POST"
之后添加dataType: 'jsonp'
。
另外,我不会使用“完成”,而是使用“成功”和“错误”:
[...]
type: "POST",
dataType: "jsonp",
data: createBody(searchTerm),
success: function(data)
console.log(data);
error: function(data)
console.error(data);
);
【讨论】:
【参考方案2】:对于以后遇到此问题的任何人来说都是有趣的 PSA。原来这个特殊的位是不可能的! POST
不能向外部域发出请求,因为它违反了same-origin policy。可以使用 JSONP
向外部域发出 GET
请求,但遗憾的是无法通过客户端的 POST 进行此操作。
我见过讨论过的最好的解决方法(除了使用JSONP GET
请求,在我的情况下这是不可能的)是将POST
请求发送到您自己的服务器,然后将请求发送到外部域。
【讨论】:
以上是关于如何将请求数据传递到 JQuery.ajax 中的 Complete 事件中的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 jquery ajax 请求传递到 wcf 服务失败反序列化?
如何将 JQuery AJAX 请求中的数据发送到 Node.js 服务器
如何将 JavaScript 变量传递给 jQuery ajax 请求
使用 jQuery.ajax 发布函数将 javascript 数组中的数据传递到服务器?