如何将请求数据传递到 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 数组中的数据传递到服务器?

jQuery实例:jQuery Ajax中的data如何传递到php后端

在 jQuery AJAX GET 调用中传递请求标头