jQuery $. get больше не возвращает данные - PullRequest
0 голосов
/ 02 октября 2010

Я использую jQuery-1.4.2 с CakePHP, и несколько дней назад у меня это работало нормально, но сейчас это не так. Я не помню, чтобы что-то менять. Я беру URL-адрес, сгенерированный из javascript, и помещаю его прямо в браузер, и я могу видеть результаты в своем браузере, однако javascript просто возвращает нулевое значение. У кого-нибудь есть иды?

<script type="text/javascript">
    $(document).ready(function() {
        var url = "http://mysite.com/vote/";

        $.get(url + "view/" + $(".votediv").attr("id")  +".json" ,
                function(data,textStatus, XMLHttpRequest) {
                    console.log(data);
                    console.log(textStatus);
                    console.log(XMLHttpRequest);
                    if(data.Votes.votecast != undefined) {

                        $(".vote."+data.Votes.votecast).addClass("current");
                    }
                },"json");
        $('.vote').click(function () {
            if ($(this).hasClass("current")) {
                alert("You have already voted for this option!");
            } else {

                var error = false;

                if ($(this).hasClass("up")) {

                    $.post(url + "edit/" + $(".votediv").attr("id")  +".json", {'vote': 'up'},
                        function(data) {
                            console.log(data);
                        }, "json");
                    //alert("Voted Up!");
                }
                else if($(this).hasClass("down")) {
                    $.post(url + "edit/" + $(".votediv").attr("id")  +".json", {'vote': 'down'},
                        function(data) {
                            console.log(data);
                        }, "json");
                    //alert("Voted Down!");
                }
                //removes all the votes
                $(this).parent().children().removeClass("current");

                if(!error) {
                    $(this).addClass("current");
                } else {
                    alert("There was an error");
                }
            }
            return false;
        });
    });
</script>

Выход из консоли отладки в браузере:

null
success

XMLHttpRequest
    abort: function () {x&&h.call(x);
    onabort: null
    onerror: null
    onload: null
    onloadstart: null
    onprogress: null
    onreadystatechange: function () {}
    readyState: 4
    responseText: ""
    responseXML: null
    status: 0
    statusText: ""
    upload: XMLHttpRequestUpload
    withCredentials: false
    __proto__: XMLHttpRequestPrototype

TypeError: Result of expression 'data' [null] is not an object.
Failed to load resource: cancelled

Вывод моего php-скрипта:

{"Votes":{"votecast":"up","sumvotes":"1","totalvotes":"1"}}

Мне интересно, почему я продолжаю получать нулевые данные. Есть идеи? Я не делаю междоменный запрос. Я запрашиваю только сценарий в своем домене.

EDIT:

Я изменил вывод JSON так, чтобы он отображался как {"Votes":{"votecast":"up","sumvotes":"1","totalvotes":"1"}}, и jsonlint.com говорит, что это допустимый JSON, однако он все еще не работает, а jQuery говорит, что результат равен нулю.

Ответы [ 2 ]

3 голосов
/ 04 октября 2010

Я вижу, что вы указываете URL в начале вашего скрипта:

var url = "http://mysite.com/vote/";

Может ли быть так, что вы нарушаете такую ​​же политику происхождения ? То есть. что вы можете делать только ajax-вызовы на исходящий сервер.

Это даст вам описанные вами симптомы: пустой ответ, но URL работает при попытке вручную через браузер.

0 голосов
/ 02 октября 2010

Я не уверен, почему он не возвращает данные, но вы, возможно, захотите убедиться, что URL-адрес $ .get будет именно тем, о котором вы думаете.Например, вы можете использовать alert(url + "view/" + $(".votediv").attr("id") +".json"); - конечно, вы можете увидеть это и в Firebug.

Я полагаю, $.get может иногда возвращать статус «успеха», даже если он на самом деле не загружает URL.

...