2013-02-27 74 views
1

嘗試通過jQuery向CloudFlare發送JSONP請求時,我收到錯誤(XMLHttpRequest cannot load https:// www.cloudflare.com/api_json.html?tkn=&email=&z=&a=rec_load_all&callback=%3F. Origin http:// domainmanager.tech-bytes.org is not allowed by Access-Control-Allow-Origin.)(由於堆棧溢出鏈接限制而插入到URL中的空格)。 CloudFlare API指出你可以通過追加&callback=mycallback參數來請求一個JSONP回調函數。我不確定我是否應該用某種東西取代mycallback,我試着用它取代它?因爲這就是其他一些資源所說的,或者如果我必須對my code進行一些其他修改。使用帶CloudFlare API的jQuery JSONP時的同源策略錯誤

+0

什麼是控制檯? '200狀態'。 – Jai 2013-02-27 05:53:06

+0

我不確定你的意思。我發佈了上面的控制檯中的內容,除非你的意思是不同的控制檯?我還發布了我存儲代碼的地址,您可能會在那裏檢索信息。 – GCGMark 2013-02-27 06:04:12

+0

我檢查了你的json api url和'那是成功的狀態來自200' – Jai 2013-02-27 06:07:49

回答

1

以這種方式嘗試跨域請求。

$.ajax({ url: "yourUrl", 
    data:{paramName1: JSON.stringify(paramValue1),paramName2: JSON.stringify(paramValue2)}, 

     contentType: "application/json; charset=utf-8", 
     dataType: "jsonp", 
     success: function(data) { 
      alert(data.d); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      alert(textStatus); 
     } 
    }); 
+0

+1爲dataType:「jsonp」,但我不認爲你通常需要參數的JSON.stringify(除非它們是你希望序列化的對象),我相信錯誤回調不會觸發jsonp請求(不妨添加處理程序,但不要感到驚訝,如果它沒有激活)。 – Iftah 2013-02-27 07:45:17

+0

有沒有辦法使用JSONP,同時仍然使用.getJSON速記方法,還是必須使用.ajax方法?我正在閱讀[API文檔](http://api.jquery.com/jQuery.getJSON/),並看到他們有一個使用.getJSON從Flickr JSONP API檢索數據的示例,但無法弄清楚如何將其應用於我的代碼,或者它與常規JSON請求的區別。 – GCGMark 2013-02-27 08:21:45

+0

@NGWMark在.getJSON中,我們不聲明數據類型爲jsonp。並且總是嘗試使用.ajax方法,從而更好地控制請求。 – Vishwajeet 2013-02-27 08:45:10

0

您可以使用CORS來達到此目的。

示例代碼:

jQuery.support.cors = true; 

function CrosDom_ajax(url) { 
     if (window.XDomainRequest 
     && $.browser.msie 
     && $.browser.version < 10) { 
     xdr = new XDomainRequest(); 
     if (xdr) { 
      xdr.onload = function() { 
       alert(xdr.responseText); 

      }; 
      xdr.open("get", url); 
      xdr.send(); 
     } 
     } 
     else { 
      $.ajax({ 
       url: url, 
       success: function (response) { 


       }, 
       error: function (data) { 
       } 
      }); 
     } 
    } 

你也需要寫在服務器端下面的代碼,允許跨域訪問

Response.AppendHeader("Access-Control-Allow-Origin", "*");