4

私はこの MooTools コードを持っています:

new Request.JSON({
  method: 'POST',
  url: URL, /*URL TO ANOTHER DOMAIN*/
  onSuccess: function(r){
    callback(r);
  }
}).post(data);

そして、このコードは POST リクエストを送信しません (OPTIONS のみ)... 以下のコードを見てください (うまく動作します):

var http = null,
  params = Object.toQueryString(data);
try {
  http = new XMLHttpRequest();
} catch (e) {
  try {
    http = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      http = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      http = null;
      alert("Your browser does not support AJAX!");
    }
  }
}
var url = URL;
http.onreadystatechange = function () {
  if (http.readyState == 4 && http.status == 200) {
    var jsonData = JSON.parse(http.responseText); /*OR EVAL*/
    callback(jsonData);
  }
};
http.open("POST", url);
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.send(params);

編集

試してみました:.setHeader('Content-Type','application/x-www-form-urlencoded');
まだ何もありません...どこに問題があるのでしょうか?

ありがとう!

4

2 に答える 2

8

これは、MooTools がリクエスト ヘッダーに余分なものをバンドルしているためです。

例えば。あなたのhtaccessが言う場合:

Header set Access-Control-Allow-Origin: *

次のようにリクエストを作成する必要があります。

var foo = new Request({
    url: 'http://fragged.org/Epitome/example/data/',
    method: 'get',
    onComplete: function (data) {
        // returns an object with name and surname  
        new Element('div[html="{name} {surname}"]'.substitute(JSON.decode(data))).inject(document.body);
    }
});

// need to remove that or CORS will need to match it specifically
delete foo.headers['X-Requested-With'];
foo.send();    

これが、飛行前の OPTIONS しか表示されない理由です。それはあなたが好きではありません:)

.htaccessを match にも変更できますがX-Requested-With、これはおそらく追加の「セキュリティ」です。

実際の例についてはhttp://jsfiddle.net/7zUSu/1/を参照してください - この変更を Request https://github.com/mootools/mootools-core/issues/2381に取得したかったときに、少し前にそれを行いました修繕。

于 2013-09-04T07:21:56.593 に答える