2014-12-02 127 views
2

我的web应用程序试图访问属于不同域的另一个服务器的信息。由于它是跨域的Ajax调用,因此我使用“dataType”作为“JSONP”而不是JSON。

现在在WebInspector-> Network选项卡中,我看到请求成功并且响应被填充。但是success()函数永远不会被调用。它总是调用状态= 200的错误函数。

由于它是JSONP请求,jQuery附加“callback =?”到URL的末尾,回调方法从未被调用,即使在获得有效的响应之后。不知道出了什么问题?

 jsonp: 'callback', 
     jsonpCallback: 'jsonpCallback' 

和定义回调函数如下:

 function jsonpCallback(data){ 
     alert("jsonpCallback"); 
     } 

jsonCallback从来没有叫,即使请求

$(document).ready(function() { 
    // When you click the Get Instances button: 
    $('#getInstances').click(function(){ 
     $.ajax({ 
      type: "GET", 
      url: "http://178.28.167.221:8080/us-east-1/instance/list.json", 
      contentType: "application/json; charset=utf-8", 
      accept: "application/json", 
      crossDomain: "true", 
      headers: {'Access-Control-Allow-Origin','*'}, 
      dataType: "jsonp", 
      success: function(msg) { 
       result = JSON.stringify(msg); 
       var obj = $.parseJSON(result); 
       console.log(obj); 
       $('#instancesTable').append('<tr><td>' + obj.autoScalingGroupName + '</td><td>' + obj.amiId + '</td><td>' + obj.instanceId + '</td><td>' + obj.instanceType +'</td></tr>');          
      }, 
      error: function(xhr, ajaxOptions, thrownError, textStatus, responseText) { 
       console.log(name + ' environment failed with error: ' + xhr.status + " " + thrownError); 

       var errorMessage = "Error"; 
       if (xhr.status == 0) { 
        errorMessage = "Can't Connect"; 
       } 
      } 
     }); 
    }); 
}); 

我还包括下面我ajax请求验证成功并且可以从服务器获得响应(显示在WebInspector的“网络”选项卡中)。

服务器的响应是一个JSON对象数组。 [{JSON1},{JSON2} ..]

注意:我尝试将contentType更改为“application/javascript”,因为响应是JSON对象的数组。但是,没有什么工作:(

+0

您是否正在尝试使用CORS或JSONP?还是你把它们混合起来?服务器支持哪一个? – Bergi 2014-12-02 19:07:32

+2

你可以发布你看到的回复吗? – 2014-12-02 19:12:27

+0

'Access-Control-Allow-Origin'是一个响应头,而不是一个请求头。试图将它用作请求标题将会破坏一个正确的CORS设置(因为它是一个非简单的请求标题)。 – apsillers 2014-12-02 19:41:38

回答

0

我有类似的问题,并解决它。 你没有指定你的服务是什么。 对我来说,这是一个WCF服务。

我不得不添加此。

<webHttpBinding> 
     <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" /> 
     </webHttpBinding> 

并设置绑定配置于上述在服务

即:bindingConfiguration="webHttpBindingWithJsonP"

这解决了这个问题。他们可能是在PHP或其他平台上实现相同的方法

相关问题