2013-06-30 44 views
0

我的Web服務器在http://mypc.com:80 `同源問題

給出下面的SNIP運行爲什麼(我認爲)b/c我的web服務在端口8000上運行,這與運行IIS的端口(端口80)不同。

我以爲我抄做的Flickr的API的調用的例子,我可以通過使用JSONP(根據jQuery文檔here

因此得到解決,但它不是工作。任何想法/ sugggestions?

UPDATE

好了,所以我的請求被現在:

var myURL = "http://192.168.1.104:8000/PSOCharts/service/HighChart_ColumnChart/i?jsoncallback=?"; 

    $.ajax({ 
     url :myURL, 
     dataType: "jsonp", 
     success: function(data) {a(data)} , 
     error: function(){alert("err");}, 
     }); 

但我不斷地撞擊誤差函數,這裏就是BEING返回什麼:

[1.4,54.43,49.39,93.23] 

現在我假定這爲B/C響應文本犯規包含任何類型的回調,

這裏是部分接口我打電話:

[WebInvoke(Method = "GET", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "HighChart_ColumnChart/{id}?callback={cb}")] 
    List<double> HighChart_ColumnChart(string id,string cb); 

下面是實際的被調用函數:

public List<double> HighChart_ColumnChart(string id,string cb) 
    { 
     var z = new List<double>(); 
     z.Add(1.4); 
     z.Add(54.43); 
     z.Add(49.39); 
     z.Add(93.23); 
     return z; 
    } 

當我調試時,CB參數是這樣的:「jQuery19108121746340766549_1372630643878」。 如何修改代碼以正確包裝它? 感謝您的幫助!

+0

從您的鏈接:「如果URL包含字符串」callback =?「(或類似的,由服務器端API定義),請求將被視爲JSONP。請參閱jsonp數據的討論請輸入$ .ajax()以獲取更多詳細信息。「也許你需要添加這個? –

+1

從這第一個答案也將有所幫助:http://stackoverflow.com/questions/2681466/jsonp-with-jquery –

回答

0

如果您使用的是jsonp,則必須修改服務器的響應,以便將您的json數據封裝在由回調查詢字符串參數指定的方法中。

所以,如果您的服務器好像回到了一句:

["test1", test2] 

它會成爲:

callback(["test1", "test2"]); 

其中「回調」的jQuery指定的查詢字符串爲您的「Web服務」

編輯:鑑於您的示例代碼,我認爲您需要序列化並手動包裝您的響應。 MVC有一個Jsonp幫助器方法,並且我看到了在.NET4中的報告,WCF將基於存在的回調參數爲您執行此操作,但如果這不起作用,請在方法結束後添加如下內容。

JavaScriptSerializer s = new JavaScriptSerializer(); 
    string jsonString = s.Serialize(z); 

    return WebOperationContext.Current.CreateTextResponse(string.Format("{0}({1});", cb, jsonString), "application/json; charset=utf-8", Encoding.UTF8); 

(修改從這裏:Wiring up JSONP using JQuery and WCF

+0

我認爲你現在走在正確的軌道上 - 但我不確定如何將它包裹在正確的'回調'我的代碼已被添加。 – Wjdavis5

+0

看我上面的編輯。 – mutex

+0

它做到了,天才。太感謝了。 – Wjdavis5

0

如果你正在嘗試使用jsonp,確保下列條件之一的情況下:

  • 如果您使用$.get和將dataType設置爲jsonp
  • 如果您在URL中使用$.getJSON幷包含callback=?