What should be the correct response from web service to display the Jquery token input results?

跟風遠走 提交于 2019-11-26 11:40:45

问题


I am using a Jquery Token Input plugin. I have tried to fetch the data from the database instead of local data. My web service returns the json result is wrapped in xml:

 <?xml version=\"1.0\" encoding=\"utf-8\"?>
<string xmlns=\"http://tempuri.org/\">[{\"id\":\"24560\",\"name\":\"emPOWERed-Admin\"},{\"id\":\"24561\",\"name\":\"emPOWERed-HYD-Visitors\"}]</string>

I have checked in the site http://loopj.com/jquery-tokeninput/ which says that the script should output JSON search results in the following format:

[
    {\"id\":\"856\",\"name\":\"House\"},
    {\"id\":\"1035\",\"name\":\"Desperate Housewives\"}
]

Both seems to be the same,but still i m not getting the items displayed in my page.

I am posting my code also. My Js code: DisplayTokenInput.js

 $(document).ready(function() {
     $(\"#textboxid\").tokenInput(\'PrivateSpace.asmx/GetDl_info\', {

            hintText: \"Type in DL Name\", theme: \"facebook\",
            preventDuplicates: true,
            searchDelay: 200

            });
    });

My web-service code:

[WebMethod]

    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
     public string GetDl_info(string q)
    {
        string dl_input = string.Empty;
        DataSet ds;
        PSData ObjDl = new PSData();
        ds = ObjDl.GetDistributionList(q);

        List<DistributionList> DLObj = new List<DistributionList>();


        foreach (DataRow datarow in ds.Tables[0].Rows)
        {
            DistributionList dl_list = new DistributionList();
            dl_list.id = Convert.ToString(datarow[\"id\"]);
            dl_list.name = Convert.ToString(datarow[\"name\"]);

            DLObj.Add(dl_list);
        }

        dl_input = JsonConvert.SerializeObject(DLObj);

        return dl_input;

    }

 }
public class DistributionList
    {
        public string id { get; set; }
        public string name { get; set; }
    }

I am posting the head portion of aspx code to show the library files i have included:

<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head runat=\"server\">
  <title>Untitled Page</title>
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />

   <link href=\"../Styles/jquery-ui-1.8.20.custom.css\" rel=\"stylesheet\" type=\"text/css\" />
      <link href=\"../Styles/token-input.css\" rel=\"stylesheet\" type=\"text/css\" />

    <link href=\"../Styles/token-input-facebook.css\" rel=\"stylesheet\" type=\"text/css\" />

    <script src=\"Scripts/Lib/jquery-1.7.2.min.js\" type=\"text/javascript\"></script>  

    <script src=\"../Scripts/jquery.tokeninput.js\" type=\"text/javascript\"></script>--%>

    <script src=\"DisplayTokenInput.js\" type=\"text/javascript\"></script>
<head>

回答1:


You need to make sure that your request is a POST request. Not a get request. See this answer to find out more about why: How to let an ASMX file output JSON




回答2:


I would assume that the code for the plugin isn't setting the content-type for ajax requests to JSON, so you could do it yourself before the service call with $.ajaxSetup ie:

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

UPDATE: Apparently asmx services sometimes have issues with the 'charset=utf-8' portion, so if that doesn't work you could try just 'application/json'

UPDATE 2:

I don't think it's the contentType causing the issue, use the following to force a POST for ajax requests and see if this fixes it:

$.ajaxSetup({
  type: "POST", contentType: "application/json; charset=utf-8"
});

UPDATE 3:

There is a default setting inside the plugin you're using that can change the requests from GET to POST. See here on it's GitHub repo: jquery.tokeninput.js

and in your copy of the js file in the project, change the line:

var DEFAULT_SETTINGS = {
    // Search settings
    method: "GET",

to

var DEFAULT_SETTINGS = {
    // Search settings
    method: "POST",

I also assume that the plugin constructs the query in a way that ignores the global jquery ajax settings anyway, so you shouldn't need to include my earlier snippets anymore.



来源:https://stackoverflow.com/questions/13558856/what-should-be-the-correct-response-from-web-service-to-display-the-jquery-token

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!