1

そのドキュメントによると、引数の一部としてパラメータGM_xmlhttpRequestを取ることができるはずです。data

しかし、私はそれを機能させることができないようです。

指定されたパラメーターをエコーする単純なサーバーがあります。

require 'sinatra'
require 'json'
get '/' do
  JSON.dump params
end
post '/' do
  JSON.dump params
end

そして、いくつかのデータをサーバーに POST しようとする単純なグリースモンキー スクリプトです。URL のクエリ パラメータとして、および postdata としてデータを渡そうとします。

// ==UserScript==
// @name        PostDataTest
// @namespace   Test
// @description Simple test of GM_xmlhttpRequest's data parameter
// @include     http://localhost:4567/
// @version     1
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant       metadata
// @grant       GM_xmlhttpRequest
// ==/UserScript==

var url = '/?q0=0&q1=1';
var data = 'd0=0&d1=1'

GM_xmlhttpRequest({ method: 'POST', url: url, data: data, onload: function(r){
  console.log('gm:' + r.responseText);
}});
$.post(url, data, function(d,s,r){
  console.log('jq:' + r.responseText);
});

jQuery を使用して postdata を POST すると、正常に動作しますが、使用して POST した postdataGM_xmlhttpRequestは無視されます。

jq:{"q0":"0","q1":"1","d0":"0","d1":"1"}
gm:{"q0":"0","q1":"1"}

これは、私が与えているパラメーターをGM_xmlhttpRequest実際には使用していないと私に信じさせます。( Firebug で のネットワーク アクティビティをdata監視できないため、よくわかりません)。GM_xmlhttpRequest

何が起きてる?私は何かを台無しにしましたか?APIはシフトしましたか?GM_xmlhttpRequestURL にパックせずにデータを投稿するにはどうすればよいですか?

4

1 に答える 1

3

OK、TamperData Firefox アドオンを使用して (postdata を送信している) を監視GM_xmlhttpRequestsして、彼らが何をしているのかを確認しました。

その差はヘッダー4つ。jQuery の送信先

Accept:             */*
Content-Type:       application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With:   XMLHttpRequest
Referer:            http://localhost:4567/

GM_xmlhttpRequest送信済:

Accept:             text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type:       text/plain; charset=UTF-8

headers:パラメータを使用してContent-Type、 myの を指定することができました。これによりGM_xmlhttpRequest、動作するようになりました。

// ==UserScript==
// @name        PostDataTest
// @namespace   Test
// @description Simple test of GM_xmlhttpRequest's data parameter
// @include     http://localhost:4567/
// @version     1
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant       metadata
// @grant       GM_xmlhttpRequest
// ==/UserScript==

var url = '/?q0=0&q1=1';
var data = 'd0=0&d1=1'

GM_xmlhttpRequest({
  method: 'POST',
  url: url+'gm',
  data: data+'gm',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
  onload: function(r){
    console.log('gm:' + r.responseText);
}});
$.post(url+'jq', data+'jq', function(d,s,r){
  console.log('jq:' + r.responseText);
});
于 2013-02-12T21:19:55.590 に答える