2014-12-02 114 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或其他平臺上實現相同的方法

相關問題