2012-02-24 116 views
-1

我有一個通過回調方法的Jquery自動完成功能。但它似乎並沒有運行。無法執行JavaScript的jQuery功能

這裏是我的代碼:

在客戶端:

<script type="text/javascript"> 

$(document).ready(function() { 
       alert("hi"); 
       $("#Text1").autocomplete({ 
        minLength: 0, 
        source: function (request, response) { 
         $.ajax({ 
          type: "POST", 
          contentType: "application/json; charset=utf-8", 
          url: 'BlissMaker.aspx/GetNames', 
          data: "{ 'sname':'" + request.term + "' }", 
          dataType: "json", 
          dataFilter: function (data) { return data; }, 
          success: function (data) { 
           if (data.d != null) { 
            response($.map(data.d, function (item) { 
             return { 
              label: item.Name, 
              value: item.Id 
             } 
            })) 
           } 
          }, 
          error: function (XMLHttpRequest, textStatus, errorThrown) { 
           alert(XMLHttpRequest.responseText); 
          } 
         }); 
        }, 
        focus: function (event, ui) { 
         $("#Text1").val(ui.item.label); 
         return false; 
        } 
       }) 
        .data("autocomplete")._renderItem = function (ul, item) { 
         return $("<li></li>") 
          .data("item.autocomplete", item) 
          .append("<a><img src='" + item.icon + "' width='32' height='32' /> " + item.Name + "</a>") 
          .appendTo(ul); 
        }; 
      } 
</script> 

在代碼隱藏:

[WebMethod(EnableSession = true)] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public List<States> GetNames(string sname) 
{ 
    List<States> sbStates = new List<States>(); 
    con = new SqlConnection("Data Source=PRATEEK\\SQLEXPRESS;Initial Catalog=BD;Integrated Security=True;Pooling=False"); 
    con.Open(); 

Me mee = (Me)Session["Me"]; 

qr = "SELECT FBFriends.FB_Id2, ActiveInfo.Name, ActiveInfo.Profile_Pic, ActiveInfo.Gender FROM [FBFriends],[ActiveInfo] WHERE FBFriends.FB_Id1='" + mee.Id + "' AND ActiveInfo.FB_Id=FBFriends.FB_Id2"; 
ds = new DataSet(qr); 
da = new SqlDataAdapter(qr, con); 
da.Fill(ds); 

ds.Tables[0].Select(ds.Tables[0].Columns[1].ColumnName + " Like '%" + sname + "%' and " + ds.Tables[0].Columns[3].ColumnName + " = 'Female'"); 

foreach (DataRow row in ds.Tables[0].Rows) 
{ 
    States st = new States(); 
    st.Id = row.ItemArray[0].ToString(); 
    st.Name = row.ItemArray[1].ToString(); 
    st.Value = row.ItemArray[1].ToString(); 
    st.Icon = row.ItemArray[2].ToString(); 
    sbStates.Add(st); 
} 

    return sbStates; 
} 

看來,自動完成功能是沒有得到所謂以及警報().. 有關如何調用它的任何建議?

新增: 檢查堆棧跟蹤後,它給了我一個錯誤

未知方法名GetNames

有什麼建議?

+0

你可以在控制檯輸出返回的數據對象嗎?只是爲了確保回調成功被調用。 – rayfranco 2012-02-24 18:39:03

+0

爲什麼在你把它們帶到這裏之前,你沒有打開javascript錯誤來查看錯誤? – Aristos 2012-02-24 18:47:48

+0

@vini結合我們所有3個答案,_jk._表示您需要修復多個語法錯誤(其中一個是缺少的括號_Marcin Necsord Szulc_)。然後用一個名爲dataToSend的變量(或任何你想要它調用的)替換'data:'部分中的字符串文字。然後運行它,它應該繼續工作。 – rcplusplus 2012-02-24 18:53:22

回答

0

謝謝大家。我終於弄錯了。 需要Web方法是爲了調用它,也包括的ScriptManager的形式必須是EnablePageMethods=true

我的代碼現在工作的一切優秀靜態。非常感謝:)

2

你忘了一個結尾「)」;

$(document).ready(function() { 
}) 

修復該部分後,檢查響應和請求在螢火蟲或此類的控制檯。

1

嘗試清理代碼中的錯誤並重新運行:

Problem at line 19 character 43: Missing semicolon. 
} 

Problem at line 20 character 41: Missing semicolon. 
})) 

Problem at line 39 character 13: Expected ')' and instead saw ''. 
} 

Problem at line 39 character 13: Missing semicolon. 
} 
+0

這只是在粘貼代碼的問題。否則一切都好。我要求邏輯錯誤 – vini 2012-02-24 18:58:57

+0

@vini你說過:'似乎自動完成功能並沒有像Alert()一樣被調用。關於如何調用它的任何建議?'編碼錯誤是爲什麼你的'alert'沒有被觸發,'autocomplete'沒有被調用。你問爲什麼不是。如果代碼不運行,則無法解決邏輯錯誤。 – 2012-02-24 19:16:26

+0

我相信你錯誤地理解了這個問題。函數沒有被調用意味着它沒有顯示任何結果,也沒有對我在代碼隱藏中應用的斷點作出反應。但是我承認我沒有檢查說明未知方法的Intellisense。現在可以幫助我嗎? – vini 2012-02-24 19:24:19

0

我不知道這是否是造成您的問題或沒有,但我在你的JQuery注意到$.ajax叫你在這裏有這樣一行:

data: "{ 'sname':'" + request.term + "' }",

我發現AJAX調用,如果我Concat的變量和字符串在$.ajax呼叫data:場失敗。

嘗試這種情況:

聲明變量外呼這樣的:

var dataToSend = "{ 'sname':'" + request.term + "' }";

data:字段更改爲這樣:

data: dataToSend,

這可能或可能無法解決你的問題問題,但它看起來更好!無論如何都要試試!

1

是否$(document).ready()被調用?如果不是,你在一個單獨的文件中的JavaScript?如果是這樣,也許文件本身無法訪問,並且ready()函數甚至沒有被調用。檢查包含JQuery文件和JavaScript文件的<script src=""></script>標籤。