Что не так с этим обратным вызовом jQuery AJAX? - PullRequest
0 голосов
/ 18 ноября 2011

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

  • Это будет успокоительно
  • Я издеваюсь над JSON. Когда я хочу проверить, является ли человек действительным, я буду использовать адрес как "check / 123"
  • Я создал папки в моей файловой системе, которые имитируют релаксирующие ссылки и файлы, которые имитируют ответ JSON. Итак, у меня есть каталог с именем «check» и внутри файла «123» со следующим содержимым:

    {"существует": "да"}

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

<!DOCTYPE html>
<html>
<head>
    <!-- meta info -->
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 
    <!-- .js files -->
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script> 
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script> 
</head>

<body>
    <div data-role="content"> 
        <form id="form_check_person">
            <div data-role="fieldcontain">
                <input type="text" id="person_id" name="person_id" value="" />
            </div>
            <div data-role="fieldcontain">
                <input type="submit" value="Check me" />
            </div>
        </form>
        <script type="text/javascript">
            $("#form_check_person").submit(function() { 
                $.ajax({ 
                    url: "check/" + $("person_id"),
                    type: "GET",
                    dataType: "json",

                    success: function() {
                        alert('success');
                    },

                    error: function() {
                        alert('error');
                    }
                });
            });
        </script> 
    </div>
</body>
</html>

редактирование:

Я добавил .val() к #{'#person_id'} и все еще получаю ошибку: /

Ответы [ 4 ]

7 голосов
/ 18 ноября 2011

Я не уверен, что вы делаете с $("person_id"). Попробуйте вместо этого:

$("#person_id").val();
1 голос
/ 18 ноября 2011

Функция ошибки всегда вызывается из-за ошибки в самом запросе (например, страница 404 на стороне клиента не найдена или служба 503 на стороне сервера недоступна).

Я подозреваю, что хитрый URL.

Попробуйте создать переменную URL вне вызова Ajax (var theLink = "check/" + $("#person_id").val()). Проверьте это в отладчике или с console.log, чтобы подтвердить это. Убедитесь, что URL действительно доступен. Затем в вашем Ajax-вызове передайте «theLink» параметру url.

Все еще не работает? Некоторые дополнительные вопросы:

Имеет ли #person_id атрибут value или является элементом, который вы должны использовать .html () или .text () вместо .val (), чтобы получить свое "значение"?

Имя «person_id» в целом звучит для меня как элемент многократного использования. То есть. не видя остальную часть вашего приложения, я могу представить, что есть несколько человек. В таком случае, вы уверены, что идентификатор используется правильно? Должен ли это быть класс вместо этого? В общем, вы выбираете ожидаемый элемент?

Каталог "проверяет" один уровень по глубине от текущей страницы, или он должен исходить из корня?

Кроме того, JSON отправляется с соответствующей кодировкой? Как выглядит ответ?

Что сообщает консоль JavaScript? Если нет ошибок, как выглядит «ответ» на GET? Доступна ли вкладка JSON (которая подтверждает, что она принята как JSON).

На карту поставлено так много переменных ... живой пример был бы замечательным. ; -)

0 голосов
/ 18 ноября 2011

у вас проблема с вызывающим элементом с идентификатором forgot #, это должно быть

url: "check/" + $("#person_id").val()

0 голосов
/ 18 ноября 2011

Вместо:

url: "check/" + $("person_id")

... попробовать:

  url: "check/" + $("#person_id").val()

... вместо этого.

...