使用自定义标头的跨域jquery ajax api调用未命中服务器

时间:2014-07-24 12:39:48

标签: javascript jquery ajax api cross-domain

我想使用jquery ajax(带有自定义标头)从客户端调用web服务。我差不多这样做了。我将access-Control-Allow-Origin设置为force.com和salesforce.com,因为我正在调用salesforce的web服务。

当我尝试在没有自定义标头的情况下调用该API时,它会获得响应,就像我使用标头调用时一样,它没有得到响应。

使用自定义标题

jQuery.ajax({
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    url: 'https://xxx.myclient.com/xxx/xxx/register',
    beforeSend: function(xhr) {
        xhr.setRequestHeader('orgid', '00D90000000oxxxx');
        xhr.setRequestHeader('userid', '00590000001Dxxxxxx');
    },
    success: function(response) {
        alert('success' + JSON.stringify(response));
    },
    error: function(jqXHR, textStatus) {
        alert('jqXHR : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus);
    }
});

也试过

jQuery.ajax({
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    url: 'https://xxx.myclient.com/xxx/xxx/register',
    headers: {
        "orgid": "00D90000000oxxxx",
        "userid": "00590000001Dxxxxxx",
    },

    success: function(data) {
        alert(JSON.stringify(data));
    },
    error: function(jqXHR, textStatus) {
        alert('jqXHR : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus);
    }
});

但在上述两种情况下,它都没有命中服务器并收到错误消息

enter image description here

enter image description here 当我没有使用任何标题时,它就会点击服务器

jQuery.ajax({
    type: 'POST',
    contentType: 'application/x-www-form-urlencoded',
    url: 'https://xxx.myclient.com/xxx/xxx/register',
    success: function(response) {
        alert('success' + JSON.stringify(response));
    },
    error: function(jqXHR, textStatus) {
        alert('jqXHR : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus);
    }
});

获得成功回应 enter image description here

在回复标题中显示

Access-Control-Allow-Headers: Content-Type

只有内容类型,这是问题吗? 我们是否需要在此处添加自定义标题?

当我使用firefox firebug分析网络时,它显示如下 enter image description here

  1. POST Register(没有传递任何标题)
  2. 选项注册(使用自定义标题)
  3. 我不知道为什么会发生这种情况

    任何人都可以提供帮助。

    先谢谢.. :))

1 个答案:

答案 0 :(得分:3)

尝试在您正在呼叫的服务的“Access-Control-Allow-Headers”列表中添加自定义标头(orgId和userId)。