проблемы автозаполнения с json на стороне сервера

По какой-то причине приведенный ниже скрипт не работает.

Это код, который я использую для генерации данных json:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Response.Clear()
    Response.Write(generate_json_data())
    Response.End()
End Sub

Это производит следующий вывод на экране:

[ {id:0,value:"c++"}, {id:1,value:"java"}, {id:2,value:"php"}, {id:3,value:"coldfusion"}, {id:4,value:"javascript"}, {id:5,value:"asp"}, {id:6,value:"ruby"} ];

Это jquery, который у меня есть до сих пор, который, похоже, не работает. Ошибки не выдает, когда ввожу в поле ввода ничего не происходит, когда должно отображать часть данных из данных json.

$("input").autocomplete({
    source: "serverside_array.aspx",
    dataType: "json",
    select: function (event, ui) {
        $("#txtAllowSearch").val(ui.item.value); // display the selected text
        $("#txtAllowSearchID").val(ui.item.id); // save selected id to hidden input
    }
});

РЕДАКТИРОВАТЬ 1: Заголовок из инструментов разработчика в хроме 10

Request URL:http://intranet/test_array.aspx?term=j
Request Method:GET
Status Code:200 OK
Request Headers
Accept:application/json, text/javascript, */*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Host:intranet
Referer:http://intranet/rights_stage_three.aspx
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/10.0.652.0 Safari/534.17
X-Requested-With:XMLHttpRequest
Query String Parameters
term:j
Response Headers
Cache-Control:private
Content-Length:204
Content-Type:application/json; charset=utf-8
Date:Thu, 27 Jan 2011 16:11:14 GMT
Server:Microsoft-IIS/6.0
X-AspNet-Version:2.0.50727
X-Powered-By:ASP.NET

РЕДАКТИРОВАТЬ 2: глядя на данные ответа XHR, я получаю следующее

имя test_array.aspx

метод получить

статус 200 ок

введите приложение/json

размер 204b

время ожидания

РЕДАКТИРОВАТЬ 3:

Теперь я в полном замешательстве. Я заработал, просто изменив тип контента, сгенерированный страницей aspx, на:

text/xml

вместо

applicaiton/json

почему он работает с text/xml, когда я возвращаю json?


person oshirowanen    schedule 27.01.2011    source источник
comment
почему бы не использовать веб-сервис, такой как asmx, для создания json?   -  person Mark Schultheiss    schedule 27.01.2011
comment
Из-за этого у меня проблемы? Потому что я не использую веб-сервис для создания json?   -  person oshirowanen    schedule 27.01.2011
comment
ну, писать в .aspx для этого нетрадиционно - поэтому и используется .asmx. Некоторая информация об asmx, на которую я ответил ранее при их настройке: with-web-service/2268178#2268178" title="веб-метод asp net, который принимает listcustomobject, не работает с веб-службой">stackoverflow.com/questions/2225781/   -  person Mark Schultheiss    schedule 27.01.2011
comment
вот и пример MVC: blog.schuager.com/ 2008/09/   -  person Mark Schultheiss    schedule 27.01.2011
comment
Пожалуйста, посмотрите на редактирование 3 в исходном вопросе.   -  person oshirowanen    schedule 28.01.2011


Ответы (2)


Используйте инструмент веб-разработки, такой как Firebug или встроенные инструменты разработки Opera и Chrome, которые могут отображать HTTP-запросы и ответы для вас.

Проверьте, не зарегистрирована ли ошибка JavaScript.

Если нет, проверьте ответ и убедитесь, что Content-Type ответов имеет значение text/javascript, если это обратный вызов, или application/json, если только данные JSON.

Без типа содержимого запрос ajax может завершиться ошибкой из-за защиты от XSS.

person Kissaki    schedule 27.01.2011
comment
Используя инструменты разработчика в chromium 10, он, похоже, не отображает сообщения об ошибках javascript. Однако он сообщает, что он успешно извлек html, когда я что-то ввожу в поле ввода, хотя я думал, что он должен сообщать о получении json... - person oshirowanen; 27.01.2011
comment
Я обновил свой исходный пост, включив в него подробности о заголовке и ответе XHR. - person oshirowanen; 27.01.2011

[ {id:0,value:"c++"}, {id:1,value:"java"}, {id:2,value:"php"}, {id:3,value:"coldfusion"}, {id:4,value:"javascript"}, {id:5,value:"asp"}, {id:6,value:"ruby"} ];

Точки с запятой в конце строки быть не должно. Также Content-Type ответа должен быть application/json. И подумайте о том, чтобы поместить все значения в двойные кавычки. Может быть, он будет работать и без него, но без него это неправильный формат JSON. Это стандартная совместимая строка JSON:

[{"id":0,"value":"c++"}, {"id":1,"value":"java"}, {"id":2,"value":"php"}]
person Andrey M.    schedule 27.01.2011