如何将请求数据传递到JQuery.ajax中的Complete事件中



我正试图编写代码来发送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请求发送到您自己的服务器,然后服务器将请求发送到外部域。

最新更新