无法在Jquery Ajax post call中获得Rest Post响应

时间:2015-04-14 12:22:53

标签: java jquery ajax web-services rest

我使用Ajax post方法调用Rest调用但是我收到以下错误或响应。

{"readyState":0,"status":0,"statusText":"error"}

即使我启用了cors($ .support.cors = true;)和crossDomain(crossDomain:true(添加标题))。

以下是示例请求: -

function() {
        $.support.cors = true;         
        var evergentData = {
        "UpdateContactRequestMessage":{
         "channelPartnerID":"123456",
       "email":"greg@gmail.com",
       "firstName":"greg",
       "lastName":"chappel",
       "externalId":"GC123",
       "sessionToken":"f53095854bb230996f54fe32ed5a63f68c7718c7"
        }
      };
      
      //GetProducts();
      
      jQuery.ajax({
        type: 'POST',
        url: 'url for rest api call',
        contentType: "application/json",
        Accept: "application/json; charset=utf-8",
        dataType: 'json',
        data: evergentData,
        //data: JSON.stringify(evergentData),
        crossDomain: true,
        processData: true,
        headers: { 'access-control-allow-origin': '*',
        },
         success: function(resp){  
             // we have the response  
             alert("Server said123:\n '" + resp + "'");  
           },  
           error: function(e){  
             alert('Error121212: ' + e);  
             alert(e.toString());
             console.log('my message' + e);
             console.log('tables: ' + JSON.stringify(e));
           } 
           
          
      });
    };
但我在'postman'谷歌浏览器扩展中测试了这个Restapi调用我得到了响应(成功得到了响应)。

以下是回复标题: -

access-control-allow-headers → client_type, content-type, accept, accept-language, auth_token_base64, appID, accept-encoding, content-length, x-requested-with

access-control-allow-methods→POST,GET,OPTIONS,DELETE

access-control-allow-origin→*

允许→GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS

content-length→92

content-type→application / json

x-frame-options→sameorigin

x-webobjects-loadaverage→0

任何人都可以帮助我,为什么我在JqueryAjax的电话会议中没有得到rest api电话的响应。

谢谢你的进步。

1 个答案:

答案 0 :(得分:0)

重要的是要了解REQUEST标头中的access-control-allow-origin': '*'什么都不做。

Access-Control-Allow-Origin标头必须位于您正在呼叫的服务的RESPONSE标头中。因此,该服务会规定允许谁调用资源,因此服务必须将您的应用URL添加到其“RESPONSE Access-Control-Allow-Origin标题中。

另请注意,通配符*不适用于通过HTTPS访问的资源。对于基于HTTPS的资源,只有绝对路径有效。

为什么Postman有效?因为浏览器没有忽略标题和策略。

更多阅读: