使用Ajax,您如何跨域触发和忘记

Joh*_*ohn 10 ajax jquery cross-domain

我想对Web服务进行一次即发即弃的jQuery调用.

基本上,我想发送一个JSON对象http://myservice.com/uservisits/create,我不关心接收任何类型的返回响应.但是,我们希望为我们的几个域使用相同的服务,这意味着要遇到与Ajax相关的跨域限制.

你怎么做到这一点?JSONP上有很多这样的东西,但我不需要处理响应.我觉得我错过了一个明显的细节.

gil*_*ly3 7

发送http GET请求的最简单方法是使用图像信标:

var json = encodeURIComponent(JSON.stringify(obj));
new Image().src = "http://myservice.com/uservisits/create?JSON=" + json;
Run Code Online (Sandbox Code Playgroud)

而且,您甚至可以通过处理loaderror事件获得一些信息.当然,如果响应不是图像,error则会调用该事件,而不是load.您可以将服务设置为返回单个像素图像以解决该问题.

编辑:提到您可能更喜欢使用HTTP POST.它不像图像信标那么简单,但您可以使用隐藏的iframe创建跨域帖子:

var frame = $("<iframe>").hide();
frame.load(function() {
    var frameBody = frame.contents().find("body");
    var form = $("<form>", {
        action: "http://myservice.com/uservisits/create",
        method: "POST"
    });
    form.appendTo(frameBody);
    $("<input/>", {
        name: "json",
        value: json
    }).appendTo(form);
    form[0].submit();
});
frame.appendTo("body");
Run Code Online (Sandbox Code Playgroud)

认为 jQuery已经内置了这样的东西.您可以尝试深入学习jQuery.ajax文档.如果没有,你可能会找到一个插件来做到这一点.