2017-08-04 4 views
0

私はXMLHttpRequestを使用する必要がありますが、どのデータ形式が関数request.send()によって期待されるのか分かりません。私はあまりにも長く探しました。XMLHttpRequest - request.send(data)はどのフォーマットをデータに期待していますか?

私は、JSONオブジェクトを渡そうとしましたが、それは動作しません:

var request = new XMLHttpRequest(); 

    request.open("GET","fileApi"); 

    var data = { 
     action: "read", 
     targetFile: "testFile" 
    }; 

     request.addEventListener('load', function() { 
      if (request.status >= 200 && request.status < 300) { 
      $("#messageOutput").html(request.responseText); 
      } else { 
      console.warn(request.statusText, request.responseText); 
      } 
     }); 
    request.send(data); 

私はupdateFile:155 XHR finished loading: GET "http://localhost/cut/public/fileApi".

を取得しかし、何もデータがサーバー上で受信されません。 | = ''アクション:

PHP(サーバー側):

$action = filter_input(INPUT_GET, "action"); 
$targetFile = filter_input(INPUT_GET, "targetFile"); 

echo ("action = '$action' | targetFile = '$targetFile'"); 
exit(); 

戻り、私はこれを承認するには、この簡単なチェックを行いましたこのtargetFile =「」

ターゲットはC#ウェブブラウザ(Internet Explorerなど)であり、それはjQueryのファイル内のエラーを検出し、作業から私のスクリプトを停止して以来、生憎私は、自分のアプリケーションでのjQueryを使用することはできません...

+0

['send'](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send)は、文字列か' FormData'オブジェクトかバイナリデータのいずれかをとります。バージョン。 – Bergi

+1

"* a C#Webbrowser(Internet Explorer)*" - ワット? jQueryはIEで動作し、必要に応じて古いバージョンを試してください。 – Bergi

+0

PHPのように、サーバー側で制御できるコードがあります。あなたが*使用したいデータフォーマットは何ですか? – Bergi

答えて

2

は、私はそれは、種々の形式を取ることができ

関数request.send()によって期待されるデータ形式を知りません。文字列またはFormDataオブジェクトが最も一般的です。一部は、サーバーが期待しているものに依存します。

私は、JavaScriptのオブジェクトではなく、JSONオブジェクトのJSONオブジェクト

を渡そうとしました。

request.open("GET","fileApi"); 

あなたはGETリクエストを作っています。 GETリクエストにはリクエスト本体があるべきではないので、send()にデータを渡すべきではありません。

GETリクエストでは、URLのクエリ文字列にデータがエンコードされることが期待されます。

var data = { 
 
    action: "read", 
 
    targetFile: "testFile" 
 
}; 
 

 
var searchParams = new URLSearchParams(); 
 
Object.keys(data).forEach((key) => searchParams.set(key, data[key])); 
 
var url = "fileApi?" + searchParams; 
 
console.log(url); 
 
// and then… 
 
// request.open("GET", url); 
 
// request.send();

警告URLSearchParams is new and has limited browser support。クエリ文字列を生成するためのライブラリを見つけることは、古いブラウザとの互換性を望むすべての読者に(簡単な)練習として残されています。

+0

このページ(https://www.w3schools.com/js/js_json_objects.asp)に従ってJSONオブジェクト私はちょうどキーの引用符を紛失しています、これはjsonオブジェクトではありませんか? – Black

+1

@Black - W3Schoolsはひどいです。そのページは間違っています。最初の例は正しいですが、JSONの表示を停止してJavaScriptの表示を開始します。 JavaScriptプログラムにJSONデータがある場合、JavaScript *文字列*になります。 W3Schoolsを信頼しないでください。 – Quentin

関連する問題