#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);
}
});
Это работает сразу в скриптовом, нет необходимости включать что-либо еще.