2013-05-26 77 views
0

我試圖寫一個Ajax用戶search.I有這樣的文本字段:在.js文件什麼是在這裏返回jQuery ajax?

<input type="text" id="userSearch" class="search-query" placeholder="Search"> 

這jQuery的吧:

$("#userSearch").keyup(function() { 
     if ($(this).val().length >= 3) { 
      $.getJSON('/User/SearchUsers', { displayName: $(this).val() }, function (data) { 
       if (data == null) { 
        alert("nothing"); 
       } 
       else{ 
        alert("OK"); 
       } 
      }); 
     } 
    }); 

這裏是UserControllerApplicationRepository課程:

[HttpGet] 
public ActionResult SearchUsers(string displayName) 
{ 
    return Json(userApp.GetUserBySearch(displayName), JsonRequestBehavior.AllowGet); 
} 

public List<User> GetUserBySearch(string displayName) 
{ 
    return userRepo.GetUserBySearch(displayName); 
} 

public List<User> GetUserBySearch(string displayName) 
{ 
    return context.Users.Include("Group").Where(u => u.DisplayName.Contains(displayName)).ToList(); 
} 

但是,這根本不起作用,它根本不提醒。那麼它是什麼意思呢?這意味着數據是空的並且不爲空?! 我也試過這個:

var i = 0; 
for (i = 0; i <= data.length; i++) { 
    alert(data[i].UserId); 
} 

但它不工作太。 我已經做了幾千次這樣的事情,但現在它不工作... 我做什麼...?

+1

你可以看到你發送和從使用瀏覽器的開發者工具的「網絡」選項卡中的服務器接收什麼。 (如果您的瀏覽器沒有開發工具,請切換到現代瀏覽器。IE8 +,Chrome,Opera,Safari,Firefox [帶有Firebug插件]都有開發工具。) –

回答

1

我會建議使用Fiddler來測試瀏覽器和你的服務器之間發生了什麼。

我也建議使用阿賈克斯,而不是這樣的,它可以讓你更加明確,在服務器上發生的錯誤捕獲:

var URL = 'yourURLGoesHere'; 
$.ajax({ 
    url: URL, type: "post", data: yourdata, dataType: 'json', contentType: "application/json", 
    success: function (data, status, jqXHR) { 
     console.log('status:', status); 
     console.log('jqXHR:', jqXHR); 
     console.log('data:', data); 
     if (data) { 
      //do your OK Stuff 
     } else { 
      //do your NOT OK Stuff 
     } 
    }, 
    error: function (data, status, jqXHR) { 
     console.log('responseText:', data.responseText); 
     //do your error stuff 

    } 
}); 

更新

它看起來像的主要問題是你如何發送數據到服務器。

如果您沒有看到500錯誤的詳細信息,則表示您使用的是WebAPI,並未設置它來顯示錯誤詳細信息。如果是這種情況,這link可能會有所幫助。

下面是使用.ajax()將查詢字符串中的displayName放入代碼的更新版本 - 主要優點是您可以捕獲錯誤事件並相應地處理它。

$("#userSearch").keyup(function() { 
    if ($(this).val().length >= 3) { 
     var URL = '/User/SearchUsers/?displayName=' + encodeURIComponent($(this).val()); 
     $.ajax({ 
      url: URL, type: "post", dataType: 'json', contentType: "application/json", 
      success: function (data, status, jqXHR) { 
       console.log('status:', status); 
       console.log('jqXHR:', jqXHR); 
       console.log('data:', data); 
       if (data) { 
        //do your OK Stuff 
       } else { 
        //do your NOT OK Stuff 
       } 
      }, 
      error: function (data, status, jqXHR) { 
       console.log('responseText:', data.responseText); 
       //do your error stuff 

      } 
     }); 
    } 
}); 
+0

使用您的ajax方法,我收到了404在控制檯沒有發現錯誤和我的方法提供了500內部服務器錯誤。你怎麼看? –

+0

您使用的是WebAPI還是MVC? 以調試模式(F5)運行您的代碼並在控制器(F9)上設置一個斷點 - 觀察發生了什麼。 您是否安裝了Fiddler - 因爲它通過瀏覽器代理數據,通常可以更容易地查看到底發生了什麼。 – 79IT

+0

謝謝你花費我的時間;) –

0

把你的代碼中ready事件

$(document).ready(function(){ 
    $("#userSearch").keyup(function() { 
     var value = $(this).val();  
     if (value.length >= 3) { 
      $.getJSON('/User/SearchUsers', { displayName: value }, function (data) { 
       if (data == null) { 
        alert("nothing"); 
       } 
       else{ 
        alert("OK"); 
       } 
      }); 
     } 
    }); 
}); 
+0

我有它,但它還沒有工作。 –

+0

@HamidReza,你正在發送數據(displayName)來獲取,你是如何從獲取數據? –

+0

http://stackoverflow.com/questions/12916340/complex-type-is-getting-null-in-a-apicontroller-parameter –