1

デバイスに埋め込まれた Web サーバーに簡単なコマンドを送信するスクリプトに取り組んでいます。サーバーが何であるか正確にはわかりません(組み込みLinux上のApacheのフレーバーだと思います)。私が求めていることは問題ではありません。

サーバー上のコードは、jQuery の$.ajax()関数から送信された URL と Chrome から送信されたまったく同じ URL に対して異なる反応を示しています。javascriptを機能させるために、jQueryがそうではないというこのリクエストでChromeが何をしているのかを把握する方法を見つけようとしています。

詳細:

デバイスに投稿してコマンドを送信するときは、次のようにします。

$.ajax({
    type: "GET",
    url: urlPrefix+'/setsetting/'+name+'='+value,
    success: function(r) {
        //command was sent
    },
    error: function(e) {
            //some http error
    }
});

値にスペースが含まれていないリクエストを行うと、サーバーは適切に機能します。ただし、値にスペースが含まれているリクエストを行うと、サーバーはその仕事をしません。つまり、サーバー上のコードが URL 内のスペースを処理する方法に問題があることは明らかですよね? 奇妙なことに、このコードで作成された URL を取得してブラウザ ウィンドウに直接入力すると、値にスペースが含まれていても、サーバーはその役割を果たします。したがって、この URL は私のスクリプトから送信されます。

http://[ip]/setsetting/setting1=value 1

動作しませんが、同じ URL をブラウザ (Chrome) に接続すると動作します。Chrome はスペースを に変更し%20ます。コードの値をフォーマットしてスペースを置き換えようとしまし%20たが、役に立ちません。$.ajax()contentType 属性を他のものに追加しようとしましたが、どれも役に立ちませんでした。

編集: $.ajax() のエラー関数が起動していることに気付きました。e.responseText は、「400 - Bad Request」という html ページです。うーん?

4

2 に答える 2

0

encodeURIComponent 関数を使用するだけではどうですか? すべての特殊記号を URL に適した形式に自動的に変換します。

encodeURI(url) は URL 全体に使用され、encodeURIComponent は URL "http://example/?someValue=" + encodeURIComponent(someValue) を構成するときに使用されます。

于 2012-11-03T22:46:02.933 に答える
-1

これを試して:

$.ajax({
    type: "GET",
    url: urlPrefix+'/setsetting/?'+name+'='+value, //Note the use of '?'
    data: 
    success: function(r) {
        //command was sent
    },
    error: function(e) {
            //some http error
    }
});

ここでは、 を使用して?、クエリ文字列パラメーターの開始位置をより適切に区切ります。

于 2012-11-03T22:47:12.377 に答える