使用javascript向api发送帖子时的跨源请求阻止错误

时间:2016-03-21 05:48:15

标签: javascript ajax

嗨我有一个这样的https://rdkportal.ccp.xcal.tv/build_images/cdl发送邮件请求给我,我将能够在json中获取一些信息作为回复。 这是使用linux发送它的格式

curl -u username:password https://rdkportal.ccp.xcal.tv/build_images/cdl -H "Content-Type: application/json" -H "Accept: application/json"  -X POST -d '{"image_name": "MX011AN_VBN_master_20160118234003sdy_NG", "recipients_list": "some_user@.com", "cdl": "PROD", "type": "tftp", "stb": { "ip4_address": "0.0.0.0", "ip6_address": "2001:558:4030:2:96d4:feff:fe7c:7500", "mac_address": "", "serial_number": "" }}'

我在发送POST请求并通过在linux机器上执行上面的curl命令接收响应时已经成功了。

我正在尝试使用ajax在javascript中执行类似的操作,但我收到以下错误。

  

阻止跨源请求:同源策略禁止在https://rdkportal.ccp.xcal.tv/build_images/cdl读取远程资源。 (原因:CORS标题' Access-Control-Allow-Origin'缺失)。

这是我的代码

$.ajax({
        type: 'POST',
        url: 'https://rdkportal.ccp.xcal.tv/build_images/cdl',
        crossDomain: true,
        data: '{"some":"json"}',
        dataType: 'json',
        xhrFields: {
            withCredentials: true
        },
        success: function(responseData, textStatus, jqXHR) {
            var value = responseData.someKey;
            alert('POST success');
        },
        error: function (responseData, textStatus, errorThrown) {
            alert('POST failed.');
        }
    });

我也不知道如何在ajax中使用请求发送凭据。请帮助我在这里受到打击。提前谢谢。

3 个答案:

答案 0 :(得分:1)

你可以通过三种方式实现这些目标:

1)如果服务器端代码不在您的控制范围内,您可以安装chrome插件意味着您没有处理它。

链接:

https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?utm_source=chrome-ntp-icon

2)。您可以创建代理服务器并使用这些新的URL / api进行通信。

3)。第三个也是最后一个也是最好的是允许Access-Control-Allow-Origin:*为*(用于访问来自任何域的所有URL)或Access-Control-Allow-Origin:'你的系统ip如果在本地运行其他hostname'(仅用于访问该特定主机)

答案 1 :(得分:0)

您需要添加标头以允许来自其他位置的请求进入端点。

“Access-Control-Allow-Origin:*”

这会向可以向此端点发出请求的授权域发送标头,(*表示全部)。

CORS希望知道您是否有权在该服务器上发出请求,因此在标头上发送请求可以解决该问题。

如何在标题上添加此项取决于您使用的语言(node php ruby​​ java)。

如果你详细说明后端,我可以帮助你。

答案 2 :(得分:0)

您需要在请求中添加以下标头:

item_id

order_items

最重要的是,服务器需要在具有相同URL的响应中发回此标头(例如root-url-here.com)。

如果您不是服务器端的开发人员,则应要求他们将您的请求URL添加到已接受的请求来源列表中。