2011-08-30 111 views
0

以下是錯誤消息: XMLHttpRequest無法加載(url1)。 Access-Control-Allow-Origin不允許使用原產地http://localhost:8081使用ajax無法獲取請求

下面是代碼:

$.ajax({ 
    url: (the url2), 
    async : false, 
    data: { fbId  : eh, 
      fbSecret : meh, 
      key  : bleh 
      }, 
    datatype: "json", 
    success: function(result){ 
       console.log(result); 
      } 
}); 

我知道網址是正確的,因爲當我點擊它,它給了我,我需要的數據,這就好比{「名字」:「嗒嗒」]}

我是否需要提供更多詳細信息?

我已經嘗試過使用jsonp/html而不是json,將數據直接放入url中而不是單獨作爲數據,並使用$ .get而不是$ .ajax,並編輯$ .ajaxsetup。 ..

+3

出於安全原因,AJAX請求不被允許到其他域。谷歌應該告訴你這個... – Bojangles

回答

1

錯誤消息說,這一切,你不能跨域Ajax請求(例外JSONP的情況下,但也必須由服務器支持)由於same-origin-policy

這可能會幫助你這裏http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

+0

嗯,有什麼辦法可以重寫這個嗎? –

+0

':)'不能覆蓋它,但你可以讓一個服務器端代理,可以訪問這個服務,然後你可以做一個Ajax請求到你的服務器代理,它將返回你的JSON響應 – Rafay

+0

..或者你可以使用JSON填充;)真的不知道你的意思是「在jsonp的情況下的異常,但也必須由服務器支持」.. – walialu

0

端口不匹配;)the the嘗試建立請求的頁面必須位於同一個端口上;)

+1

爲什麼downvote?這是完全正確的。 –

0

我認爲您嘗試訪問的服務器與服務腳本的服務器不同 - 從服務器A提供的頁面內的JavaScript代碼可以只使用XmlHttpRequest訪問服務器A.

如果這是問題,那就沒有簡單的解決方案 - 您必須使用代理或完全避免使用XmlHttpRequest。

0

same-origin-policy是一種瀏覽器安全措施,它限制JavaScript代碼與源自其他網站的資源進行交談,即從任何其他域和/或端口加載的資源。例如。 JS在網頁上運行http://google.com:80不能從http://cbs.com加載或數據甚至http://cbs.com:8081

工作圍繞互動SOP 一)代理在您的服務器:您創建您的應用程序一個終點,討論到的外部URL並返回導致

b)加載JSON響應轉換爲<script>標籤否則JSONP即與填充JSON

例如:

var url = "http://localhost:8081/?queryString=asdsa&callback=jsonCallback"; 

var script = document.createElement("script"); 
script.setAttribute("src", url); 
script.setAttribute("type", "text/javascript"); 

window.jsonCallback = function(jsonObj) { 
    // use JSON object here 

    // cleanup 
    document.body.removeChild(script); 
    delete window[callback]; 
} 

document.body.appendChild(script) 

在你的情況下,因爲你正在運行它的一個不同的端口它是無效的,因此由瀏覽器拋出的錯誤..

並且有一些服務器端的變化,與此一起..閱讀如何這樣做對你的腳本語言..

基本反應應該是這樣的:

jsonCallback({"Name": "Random", "Id" : 2432, "Rank": 453}) 
0

使用dataType: "JSONP"克服你所遇到的限制;請檢查documentation以正確實施它。您還必須爲其提供回調函數。