JQuery пост публикуется дважды? - PullRequest
0 голосов
/ 20 сентября 2011

Я использую пост jquery, и почему-то кажется, что пост был опубликован дважды. Я тестирую это на Android Broswer. Очень проводной Кто-нибудь знает почему? Это ошибка JQuery или что-то?

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <script type="text/javascript" src="vendor/jquery-1.5.js"></script>
    <title>Test Runners</title>
</head>
<body>

<h1>Test Runner</h1>
<script type="text/javascript">
    post_result = function() {
        console.log("post_result is called!");
        $.post( 'http://192.168.2.3:8001',  { 'jasmine-url' : "test url" ,'jasmine-content' : "test content" } )
            .success(function() { alert("second success"); return true; })
            .error(function() { alert("error"); return true; })
            .complete(function() { alert("complete"); return true; });
    }
</script>
<a href="javascript:post_result()">post result</a>
</body>
</html>

Подробнее:

Внесены некоторые изменения в исходное сообщение.

На самом деле в Chrome он только сделал два запроса, когда мы впервые выполняем пост-запрос, один из которых - метод OPTION, а другой - POST.

Но в браузере Android один и тот же код делает два запроса POST каждый раз. Я думаю, что может быть что-то не так с JQUERY с браузером Android. Кто-нибудь знает об этом?

1 Ответ

2 голосов
/ 20 сентября 2011

Не уверен, почему он будет публиковаться дважды, но я отмечаю несколько проблем с вашим кодом.

Прежде всего, мы давно миновали встроенный JavaScript, и выполнение JavaScript внутри атрибута href - это большое нет, нет (для этого есть атрибут onclick, но это еще один динозавр, которого вы не должны касаться). Существует множество великолепных JavaScript-фреймворков, которые упрощают привязку к таким событиям, как клик.

Во-вторых, ваша post_result функция определена как глобальная и не имеет точки с запятой.

Чтобы исправить вышесказанное, следующий фрагмент должен быть помещен в заголовок или в отдельный файл. Он будет делать то же самое, но в более jQuery-иш-стиле, следуя передовой практике.

JavaScript

// Short-hand for DOM-ready
$(function(){
    // Define variable in local scope to store request
    var request;

    // Bind to the click event to all anchors with the class post-results
    $("a.post-results").click(function(e){
        // Prevent default behavior. I.e. stop browser from navigating
        e.preventDefault();

        // If there's a previous request, abort it. No need for two.
        // You could also return here if you want to wait for the first
        // one to finish.
        if (request) { request.abort(); }

        // Let's fire off the request and store it for future reference
        request = $.post(
                'http://192.168.2.3:8001',
                {
                    "jasmine-url": "test url",
                    "jasmine-content": "test content" 
                }
            )
            .success(function(res) {
                console.log("second success", res);
            })
            .error(function(xhr, err) {
                console.log("error", err);
            })
            .complete(function() {
                console.log("complete");
                // Set request var to null
                request = null;
            });
    });
});

HTML

<a class="post-results" href="#">Post result</a>

Чтобы убедиться, что jQuery загружен правильно, вы должны загрузить его из общедоступного CDN, такого как API библиотек Google .

Я также призываю вас перейти к типу HTML5, который обратно совместим с HTML4. Просто переключите ваш тип документа на <!DOCTYPE html> и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...