Почему Jquery GET request не возвращает никаких данных?

#php #jquery #greasemonkey

#php #jquery #greasemonkey

Вопрос:

 $.get("http://localhost/code.php", function(data){
alert(data);
});
  

code.php:

 <?php
echo "hello!";
?>
  

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

Я запускаю скрипты на сервере IIS.

[ПРАВИТЬ / ПРАВИТЬ код]

Я забыл добавить важную деталь, я вызываю php-скрипт из скрипта greasemonkey. Я попробовал это на сервере, и это работает. Но мне это нужно для greasemonkey.

Комментарии:

1. Итак, если вы перейдете к localhost/code.php — что ты видишь? Кроме того, я предполагаю, что вы вызываете это со страницы, которая также обслуживается с локального хоста, верно?

2. И что говорит ваша консоль JS? Какие-либо ошибки?

3. А как насчет журналов вашего сервера? Можете ли вы подтвердить, что он получает запросы?

4. В инструментах разработки браузера есть вкладка «Сеть», где вы можете увидеть, какие запросы сделаны и что внутри ответа…

5. Приношу свои извинения за короткий ответ. Я удалил его и поместил в комментарий. Спасибо! Вот оно: я поместил ваш код в правильный контекст, и он отлично работает со мной! <html> <head> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"> </script> <script type="text/javascript"> $.get("http://localhost/code.php", function(data){ alert(data); }); </script> </head> <body> </body> </html>

Ответ №1:

Если вы вызываете методы с удаленной страницы через GreaseMonkey , the prefix unsafeWindow.` должен быть добавлен:

 unsafeWindow.$.get("http://localhost/code.php", function(data){
    alert(data);
});
  

Если вам не нужны методы, специфичные для jQuery, я рекомендую использовать GM_xmlhttpRequest :

 GM_xmlhttpRequest({
    "method": "get",
    "url": "http://localhost/code.php",
    "onload": function(data){
        alert(data);
    }
})
  

Ответ №2:

Судя по этому сообщению в блоге, Greasemonkey не предлагает объект XHR, используемый jQuery, поэтому вам нужно обернуть то, что он предлагает, и настроить jQuery AJAX с пользовательской реализацией.

Я приведу здесь соответствующий код:

 // Wrapper for GM_xmlhttpRequest
function GM_XHR() {
    this.type = null;
    this.url = null;
    this.async = null;
    this.username = null;
    this.password = null;
    this.status = null;
    this.headers = {};
    this.readyState = null;

    this.open = function(type, url, async, username, password) {
        this.type = type ? type : null;
        this.url = url ? url : null;
        this.async = async ? async : null;
        this.username = username ? username : null;
        this.password = password ? password : null;
        this.readyState = 1;
    };

    this.setRequestHeader = function(name, value) {
        this.headers[name] = value;
    };

    this.abort = function() {
        this.readyState = 0;
    };

    this.getResponseHeader = function(name) {
        return this.headers[name];
    };

    this.send = function(data) {
        this.data = data;
        var that = this;
        GM_xmlhttpRequest({
            method: this.type,
            url: this.url,
            headers: this.headers,
            data: this.data,
            onload: function(rsp) {
                // Populate wrapper object with returned data
                for (k in rsp) {
                    that[k] = rsp[k];
                }
            },
            onerror: function(rsp) {
                for (k in rsp) {
                    that[k] = rsp[k];
                }
            },
            onreadystatechange: function(rsp) {
                for (k in rsp) {
                    that[k] = rsp[k];
                }
            }
        });
    };
};
  

И для настройки AJAX jQuery:

 $.ajaxSetup({
    xhr: function(){return new GM_XHR;}
});
  

После этого шага .get() и другие методы AJAX должны работать нормально.

Ответ №3:

Ну, в конце концов я отказался от greasemonkey, поскольку он не работал, что бы я ни пробовал. Итак, я стал скриптовым, и, как назло, нужный мне код находился всего в одном клике от страницы дополнения. Итак, вот оно, если оно кому-то еще нужно:

 var ret = GM_xmlhttpRequest({
  method: "GET",
  url: "http://localhost/code.php",
  onload: function(res) {
    alert(res.responseText);
  }
});
  

Это работает сразу в скриптовом, нет необходимости включать что-либо еще.