$.getJSON не работает
Я ищу связанную тему в jQuery. Но я не видел никакого способа решить свою проблему.
$(document).ready(function(){
$("#inputForm").submit(function(event){
$(":text").each(function() {
var inputText = $(this).val();
var userList = [];
var weblink = 'http://test.com';
// problem is from here.
$.getJSON(weblink, function(data){
alert(weblink); // this statement doesn't show up
$.each(data, function(entryIndex, entry){
userList.push(entry['from_user']);
});
});
alert(userList);
});
});
});
есть четыре проблемы:
- почему первое предупреждение ('weblink') не появляется.
- почему этот код не может получить данные json с веб-сайта
- цель этого кода-получить тег from_user из файла json и сохранить его в массив userList.
- переменные "$.каждый(данные, функция(entryIndex, запись){" заявлении функция имеет два входных параметра: один-entryIndex, а другой-entry, мне так интересно, для чего эти два параметра? и как я могу использовать этих двух показателей.
кто-нибудь может помочь мне решить эту проблему. Я был запасом здесь в течение одного дня. Большое спасибо.
5 ответов
пару вопросов:
getJSON
выполняет запрос ajax. Запросы Ajax подлежат Та Же Политика Происхождения. Если ваша страница не загружена изhttp://test.com
(или несколько других предостережений), это не сработает. Вы, вероятно, ищете JSON-P (который также поддерживает jQuery), при условии, что сервер поддерживает его.getJSON
, как и все запросы ajax, является асинхронные по умолчанию, поэтому ваш второе предупреждение (со списком пользователей) произойдет до запрос завершается. Хотя вы можете сделать запросы ajax синхронными, это очень плохая идея (блокирует пользовательский интерфейс большинства браузеров во время запроса). Вместо этого просто используйте список пользователей после его получения в обратном вызове, а не пытаться использовать его в вызове функцииgetJSON
.
редактировать: вы сказали ниже, что пытаетесь использовать API поиска Twitter. Этот API тут поддержка JSON-P, поэтому, если вы используете JSON-P для выполнения вашего запроса, он должен работать. например:
$(document).ready(function(){
$("#inputForm").submit(function(event){
$(":text").each(function() {
var inputText = $(this).val();
var userList = [];
var weblink = 'http://search.twitter.com/search.json?q=&ands=google';
// problem is from here.
$.ajax({
url: weblink,
dataType: "jsonp", // <== JSON-P request
success: function(data){
alert(weblink); // this statement doesn't show up
$.each(data.result, function(entryIndex, entry){ // <=== Note, `data.results`, not just `data`
userList.push(entry['from_user']); // <=== Or `entry.from_user` would also work (although `entry['from_user']` is just fine)
});
alert(userList); // <== Note I've moved this (see #2 above)
}
});
});
});
});
...но, конечно, вы не хотите делать это для каждого текстовое поле в форме?
вот живой пример но без формы (и только один запрос, а не запрос для каждого поля).
просто добавьте в ссылку
&callback=?
или
?callback=?
(если это первый и только получить переменную) Это сделает ваш вызов в вызов JSONP, который не имеет проблем с той же политикой происхождения.
вы используете платформу MVC? По-видимому, по умолчанию блоки MVC 2.0 получают запросы на действия, возвращающие JsonResult. Проверьте:
http://mhinze.com/2010/04/13/json-hijacking-in-asp-net-mvc-2/
У меня была та же проблема при обновлении существующего приложения (написанного в MVC v1), которое использовалось .getJSON вызывает, чтобы вытащить данные из контроллера MVC для просмотра (через jQuery / javascript) и не мог понять, почему они не работают, я пробовал разные версии jquery не повезло, затем я нашел вышеуказанную ссылку. Вместо этого я перешел на POST (а также немного изменил способ отправки данных из словаря, используемого контроллером ) и получил его работу - наконец!!
удачи! JayD
Я хотел бы добавить еще одну причину, почему в jQuery.getJSON () может не отвечать, как ожидалось в среде разработки под IIS для Windows.
следуя всем приведенным здесь процедурам, я не смог получить никаких данных от A *.файл json, только если я изменил расширение на *.js, статус ответа возвращен
{"status"="404", "statusText"="Not Found"}
затем я вспомнил, что с IIS есть некоторые MIME/типы, которые не указаны. Добавление mime / Type application/json для файлов с расширением .json решил мою проблему.
для получения информации о том, как добавить MIME/types на iis7.