2012-04-11 48 views
1

我在stackoverflow上看到了一堆類似的帖子,但都不適用於我。我有簡單的支持AJAX的WCF服務,基於輸入如何將JSON數據傳遞給WCF方法設置jquery自動完成源時

[OperationContract] 
    public IEnumerable<string> GetCities(string prefix) 
    { 
     string[] cities = new[] { "New York", "Atlanta", "Los Angeles", "Las Vegas", "Arizona", "New Hampshire", "New England" }; 

     if(!String.IsNullOrEmpty(prefix)) 
     { 
      cities = cities.Where(a => a.ToLower().StartsWith(prefix.ToLower())).ToArray(); 
     } 

     return cities; 
    } 

現在,我試圖讓使用jQuery用戶界面的自動完成這個方法的調用,它返回城市。問題是我必須將前綴參數傳遞給方法調用,但無論我嘗試前綴參數獲取附加到url作爲查詢字符串。這裏是我有的jQuery代碼

$("input[type=text][id*=autocompleteBox]").autocomplete({ 
    source: function (request, response) { 
     var dataCity = {'prefix': request.term}; 
     $.ajax({ 
      url: "http://localhost:1939/Cities.svc/GetCities", 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify(dataCity), 
      success: function (data) { 
       response($.map(data, function (item) { 
        return { 
         label: data 
        } 
       })); 
      } 
     }); 
    }, 
    minLength: 0 
}); 

我知道我有3個選項來調用遠程數據源。 第一個選項是上面的代碼,但這種方式我已經串聯json結果附加到url。

然後,我試圖簡單地將服務的URL傳遞給源選項,但我得到了相同的結果(term = myinput追加到URL)。

我不能使用第三個選項(一個數組與本地數據),因爲我有很多條目,我不想保留它們全部在客戶端。

那麼如何將前綴參數傳遞給服務方法?這是可能的,或者如果我選擇使用jquery ui的自動完成小部件,我必須堅持使用url附加參數?

回答

1

其實,我做的代碼一些錯誤。我應該映射返回的結果,在這種情況下是data.d.這是工作代碼。

$("input[type=text][id*=autocompleteBox]").autocomplete({ 

     source: function (request, response) { 

      var data = { 'prefix': request.term}; 

      $.ajax({ 
       type: "POST", 
       url: "http://localhost:1939/Cities.svc/GetCities", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       data: JSON.stringify(data), 
       processdata: true, 
       success: function (result) { 
        response($.map(result.d, function (item) { 
         return { 
          label: item 
         }; 
        })); 
       }, 
       error: function (er) { 
        alert(er); 
       } 
      }); 
     }, 
     minLength: 1, 
     open: function() { 
      $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
     }, 
     close: function() { 
      $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
     } 
    }); 
2

我在您的ajax調用中沒有看到指定的HTTP方法(type參數),所以它默認爲GET,GET不能有內容。使用GET時傳遞數據的唯一方法是通過URL參數。順便說一句。因爲你的方法只是獲取數據,它應該使用GET請求。

所以不是JSON的,僅發送:

var dataCity = "prefix=" + encodeURIComponent(request.term); 
+0

嗨,感謝您的快速響應,我不能同意我應該使用GET請求獲取數據的想法。其實我在代碼中犯了一些錯誤,特別是我應該映射data.d而不是數據。我將發佈完整的代碼作爲答案。 – Michael 2012-04-12 19:03:45

+0

Sry忘了提及,謝​​謝指出我沒有指定類型參數。 – Michael 2012-04-12 19:08:32

相關問題