проблемы с получением плагина jquery tokeniput для работы с asp.net mvc 3 - PullRequest
1 голос
/ 26 апреля 2011

Я пытаюсь заставить плагин jQuery Tokeninput работать с моим mvc-приложением, но, похоже, где-то возникла проблема ,,

Мой код:

            <input type="text" id="MajorsIds" name="MajorsIds"  />
            <script type="text/javascript">
                $(document).ready(function () {
                    $("#MajorsIds").tokenInput("/AjaxAPI/Major/GetMajors"
                    , {
                        prePopulate: [
                            { "id": 501, "name": "Test 1" },
                            { "id": 502, "name": "Test 2" },
                            { "id": 503, "name": "Test 3" }
                        ]
                    });
                });
            </script>

Server ActionResult

    public ActionResult GetMajors(string q)
    {
        var majors = _majorService.GetAllMajors()
            .Where(m=> m.Department.ToLower().Contains(q.ToLower()))
            .Select(m => new {id = m.Id, name = m.Department});

        return Json(majors,"text/html",JsonRequestBehavior.AllowGet);
    }

Когда я набираю «a», например, во входных данных поиска, на сервер отправляется запрос, и данные извлекаются, однако извлеченные данные неотображается ,,, вместо этого сообщение "search ..." заморожено.

results are not being displayed !

Заголовки ответа

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Tue, 26 Apr 2011 00:18:48 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 24
Connection: Close

Заголовки запроса

GET /AjaxAPI/Major/GetMajors?q=a HTTP/1.1
Host: localhost:5000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
X-Requested-With: XMLHttpRequest
Referer: http://localhost:5000/Home/GettingStarted

Ответ

Возвращенный JSON на странице вывода:

[{"id":1,"name":"ACCT"},{"id":3,"name":"AE"},{"id":4,"name":"ARC"}, {"id":5,"name":"ARE"},{"id":20,"name":"MATH"},{"id":21,"name":"STAT"}]

Я действительно нене знаю, в чем проблема ,, или как ее исправить ,,, мой ответ json действителен, и результаты должны отображаться, но по какой-то причине он не работает ,,,


Когда я пыталсяпри условии демонстрации, которая вызывает внешнюю ссылку на моем сервере, она работала просто отлично, однако некоторые дополнительные параметры отправляются вЕсть с демонстрационным кодом.

Демо-код:

    <input type="text" id="demo-input" name="blah" />
    <script type="text/javascript">
    $(document).ready(function() {
        $("#demo-input").tokenInput("http://shell.loopj.com/tokeninput/tvshows.php");
    });
    </script>

Заголовки ответа

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Mon, 25 Apr 2011 22:53:34 GMT
Content-Type: text/html
X-Powered-By: PHP/5.3.3-1ubuntu9.1
Via: 1.1 cache4.ruh
Age: 0
Transfer-Encoding: chunked
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Content-Encoding: gzip

Запрос заголовков

GET http://shell.loopj.com/tokeninput/tvshows.php?callback=jQuery151008570635266447713_1303770077700&q=a&_=1303771352965 HTTP/1.1
Host: shell.loopj.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Cookie: __utma=71995406.317557806.1303476969.1303642425.1303757215.5; __utmz=71995406.1303476969.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=71995406

Ответ

, если я непосредственно отображаю содержимое ссылки http://shell.loopj.com/tokeninput/tvshows.php ,,, я получаю текущий результат:

[{"id":"978","name":"cha$e"},{"id":"1530","name":"The Life and Times of Tim"},{"id":"1210","name":"Kenny vs. Spenny"},{"id":"1393","name":"Sex and the City"},{"id":"1394","name":"Shark"},{"id":"1395","name":"Shaun the Sheep"},{"id":"1398","name":"Side Order of Life"},{"id":"1397","name":"Shear Genius"},{"id":"1396","name":"Seinfeld"},{"id":"1399","name":"Sinchronicity"}]

Однако,,, используя firebug, показанный ответ немного отличается:

jQuery151008570635266447713_1303770077699([{"id":"978","name":"cha$e"},{"id":"1530","name":"The Life and Times of Tim"},{"id":"1706","name":"The Peter Serafinowicz Show"},{"id":"1389","name":"Sea Patrol"},{"id":"1390","name":"Secrets of a Small Town"},{"id":"1211","name":"Kitchen Nightmares"},{"id":"1212","name":"L.A.P.D.: Lekanopedio Attikis Police Department"},{"id":"1214","name":"Lab Rats (2008)"},{"id":"1215","name":"La Femme Nikita"},{"id":"1216","name":"L.A. Ink"}])

обратите внимание, что ответ включает в себя дополнительные параметры "обратного вызова" и "_", которые были предоставлены в запросе ,,, я действительно незнаете, откуда они пришли, но происходит что-то странное


Может кто-нибудь, пожалуйста, помогите мне найти решение этой проблемы?

Примечание: я пытался сделать это с помощью POST, но все же это нене работаетТакже я попытался использовать полный URL: http://localhost:500/AjaxAPI/Major/GetMajors вместо просто / AjaxAPI / Major / GetMajors ,,, то же самое.

1 Ответ

2 голосов
/ 26 апреля 2011

Ok ,,, я сделал следующее, и это сработало:

На веб-сайте плагина упоминалось, что настройки по умолчанию для опции crossDomain - false, однако, когда я проверял плагин, 'crossDoman'не назначается значение по умолчанию ,,, поэтому я просто добавил crossDomain: false, к массиву настроек по умолчанию в плагине, и проблема была решена.

Теперь я не знаю, почему он не работал раньше, когдаЯ определил параметры crossDomain, чтобы они были ложными из звонка ,,, я думаю, что это из-за кеширования.

Спасибо за вашу помощь, Хоган ,,, Я не знал, что jsonp существовал.

...