2009-02-11 16 views
6

Ben burada bir uyarı koyarsanız o kadarjQuery getJSON

function invokeAction() { 
     var searchText = $("#SearchTextBox").val(); 

     // Invoke MVC controller action 
     $.getJSON("/Home/Results/" + searchText, bindResults); 
    } 

gibi JSON sonuçlarını almak için bir kontrolöre ben SEARCHTEXT kesinlikle sahip olduğunu görebileceğiniz bir metin kutusu bazı metin geçmek çalışıyorum kontrolöre herhangi değerleri iletmiyor Bu kontrolör eylem bir kesme noktası koyduğunuzda bir değer, ancak: geçirilen

public ActionResult Results(string search) 
    { 
     var r = from t in db.Restaurants 
       where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%") 
       orderby t.Name ascending 
       orderby t.Rating descending 
       orderby t.NumOfViews 
        descending 
       select t; 

     return Json(r.ToList()); 
    } 

dize null, henüz ayıklayıcısında http bağlamı kontrol ederken benim SEARCHTEXT url bir parçasıdır.

Bu null olmadığı için sorgu sonuç döndürmez.

Burada bir şey mi özlüyorum?

cevap

9

Json'u hizmetlerden döndürme konusunda bazı sorunlar yaşadım ve herhangi bir çağrı almadım. json'un hatalı biçimlendiği ve bunu test edebildiğimi ve bu hataları ajax çağrısının hata seçeneğini ele alarak çözdüğünü fark ettim.

$.ajax({ 
    type: "GET", 
    url: "Home/Results/", 
    data: { search: searchText }, 
    dataType: "json", 
    error: function(xhr, status, error) { 
    // you may need to handle me if the json is invalid 
    // this is the ajax object 
    }, 
    success: function(json){ 
    alert("Data Returned: " + json); 
    } 
}); 
+0

Teşekkürler, bunu kullandım ve bir hata yakaladım. Ayrıca bana dairesel bir referansım olduğunu söyleyen firebug kullandım. Veritabanımı biraz ayırmam gerektiğini düşünüyorum. – ddd

+0

Havalı, memnun oldum, cevabımı aldım? – bendewey

+0

Evet bendewey, cevabı alabilirsiniz;) – ddd

2

Sen rotanızı düzeltmek ve doğru parametreye bağlamak almak için {arama} ile {id} değiştirmek zorunda kalacak - böyle bir şey deneyin:

routes.MapRoute("search", "Home/Results/{search}", 
    new { controller = "Home", action = "Results" }); 

sen istemiyorsan bunu yapmak için, size bağlayıcı çözecektir

$.getJSON("/Home/Results?search=" + searchText,bindresults); 

menü noktası standart bir sorgu dizesi olarak parameterName belirterek şöyle yapabilirsiniz.

+0

değiştim o $ .GetJSON T0 ("/ Ev/Sonuçlar /", {araması SEARCHTEXT}, function (data) {alert ("g"); movieView.set_data (veri);}); Burada, hata ayıklama için uyarı kutusu var. Asla ulaşılmadı. Denetleyiciye bir kesme noktası koyarsam bir JSON sonucunu döndürür. Herhangi bir fikrin var mı? – ddd

+0

Aslında bu işlevi çağırıyor, ancak denetleyici sonuç vermiyorsa. Ayarlamak istediğimde veri setinin çağrıldığını sanmıyorum. Eski verileri temizlemem gerekecek mi? – ddd

+0

temel bir numaralı Json'u deneyin (yeni {result = "hello"}); ve bunun işe yarar olup olmadığını görün –