0

我正在尝试从我的 Jquery 移动应用程序(托管在 Amazon S3 上)向“http://paraimpu.crs4.it/data/new”发出 http POST 请求,以将数据插入到 Paraimpu 站点上的传感器中。这是我提出的要求:

        data = "Test";
        valueToSend = '{"token":"c9d1cee6-da40-4e97-afc8-209045786b04","content-type":"application/json","data":' + data + '}';
        $.ajax({
            url: "http://paraimpu.crs4.it/data/new",
            type: "POST",
            data: valueToSend,
            dataType: "json",
            crossDomain: true,
            contentType:"application/json",
            success: function(){
            alert('Success');
        }
        });

我不断得到

XMLHttpRequest 无法加载http://paraimpu.crs4.it/data/new。Access-Control-Allow-Origin 不允许来源“http://webappz.s3-website-us-east-1.amazonaws.com”。

我知道这是因为跨域策略,但我该如何解决呢?paraimpu 页面上的说明非常模糊,只是说:

将执行 HTTP POST 的新传感器数据推送到:

http://paraimpu.crs4.it/data/new

内容如下: {"token":"c9d1cee6-da40-4e97-afc8-209045786b04", "content-type":"text/plain", "data":RAW DATA}

4

1 回答 1

0
data = "Test";
valueToSend = '{"token":"c9d1cee6-da40-4e97-afc8-209045786b04","content-type":"application/json","data":' + data + '}';
    $.ajax({
        url: "http://paraimpu.crs4.it/data/new",
        type: "POST",
        data: valueToSend,
        dataType: "jsonp",    //set datatype to jsonp
        crossDomain: true,
        jsonp: false,
        contentType:"application/json",
        success: function(){
            alert('Success');
        }
    });​

这些是您缺少的部分:

dataType: "jsonp":您期望从服务器返回的数据类型。“jsonp”,使用 JSONP 加载到 JSON 块中。添加一个额外的“?callback =?” 到 URL 的末尾以指定回调。通过将查询字符串参数“_=[TIMESTAMP]”附加到 URL 来禁用缓存,除非缓存选项设置为 true。

jsonp: false:覆盖 jsonp 请求中的回调函数名称。在“callback=?”中将使用该值代替“callback” url 中查询字符串的一部分。所以 {jsonp:'onJSONPLoad'} 会导致 'onJSONPLoad=?' 传递给服务器。从 jQuery 1.5 开始,将 jsonp 选项设置为 false 会阻止 jQuery 将“?callback”字符串添加到 URL 或尝试使用“=?”。为转型。在这种情况下,您还应该明确设置 jsonpCallback 设置。例如,{ jsonp: false, jsonpCallback: "callbackName" }

更多信息在这里:jQuery.ajax()

于 2012-10-08T04:10:57.423 回答