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

时间:2013-08-15 20:18:39

标签: jquery ajax

我正在尝试编写代码来发送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没有多少经验,我不知道是什么。

2 个答案:

答案 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请求发送到您自己的服务器,然后服务器发送请求外部域。