2014-10-01 61 views
0

我有一個RESTful Web服務和與服務交談的jQuery插件。這些域是不同的,所以我實現了JSONP並且一切正常。我可以在同一個域上使用JSONP嗎

我只是在進行一些更改,並將我的測試客戶端和測試服務託管到localhost,但我的JSONP回調不再被調用。

這裏是我的jquery調用。

var urlbase = 'http://localhost:8080'; 

$.getJSON(urlbase + '/Geography/Countries?callback=?', function (results) { 
    alert(results); 
    // populate the country lookup 
    $.each(results, function (key, value) { 
     $('select#countrylookup') 
      .append($('<option></option>') 
      .attr('value', value.Code)  
      .text(value.Name)); 
    }); 

我知道一個事實,即該服務被稱爲並正在返回的結果,因爲我的服務斷點被擊中,我可以看到在提琴手/ F12工具的請求/響應。

如果(因爲我懷疑)我需要JSON的'本地域'和JSONP跨域的測試時,其他人採用什麼樣的策略?很顯然,我不想任何if(domain == local)風格的代碼。

回答

0

更新:原來,我的問題就出在VS2010 Web服務器中。如果我在本地IIS中託管網站沒有任何問題。即使使用原始的getJSON。

我已經運行了幾天,現在似乎都很好。我從來沒有在我原來的問題中提到過我可能應該使用VS2010和WebDev.WebServer40.exe。

回答實際問題:是的,您可以在本地主機上使用JSONP。

1

getJSON方法將確定它是否是來自URL的跨域調用,因此您無法使用它來對同一個域進行JSONP調用。使用ajax方法,這樣就可以指定它應該使用crossDomain財產使用JSONP:

$.ajax({ 
    url: urlbase + '/Geography/Countries?callback=?', 
    cache: false, 
    crossDomain: true, 
    success: function (results) { 
    alert(results); 
    // populate the country lookup 
    $.each(results, function (key, value) { 
     $('select#countrylookup') 
     .append($('<option></option>') 
     .attr('value', value.Code)  
     .text(value.Name)); 
    }); 
    } 
}); 
+0

感謝您抽出時間幫忙。不幸的是,我仍然無法得到這個工作,當提出本地請求時,我收到了400個錯誤的請求。 – 2014-10-01 13:33:02

+0

更新:發現我的問題在於VS2010 Web服務器。如果我在本地IIS中託管網站沒有任何問題。即使使用原始的getJSON。我會做更多的檢查,確保我是正確的。 – 2014-10-01 15:22:41

+0

Upvoted這個答案,因爲雖然它沒有解決我的實際問題,我沒有意識到'.ajax的'crossDomain'設置 – 2014-10-09 08:04:52