2017-07-29 8 views
2

次のJQuery ajax呼び出しはうまく動作します。 Json文字列をパラメータとして渡しています。 これはうまく動作します。 しかし、LoadFileSeperator = '#'の場合、JSONパラメータはサーバー上のAJAXSettingsUpdateで受信されたときに切り捨てられます。

LoadFileSeperatorをどのようにエンコードすることができますか?どんな値でもJSONは切り捨てられません。

var jsonQuery = '{"LoadFileSeperator":"' + LoadFileSeperator + '",' + 
    '"MakeUpperCase":"' + MakeUpperCase + '",' + 
    '"PreAdviceGate":"' + PreAdviceGate + '",' + 
    '"PreAdviceRail":"' + PreAdviceRail + '",' + 
    '"PreAdviceBirth":"' + PreAdviceBirth + '"' + 
    '}'; 

$.ajax({ 
    type: "GET", 
    url: "/Admin/AJAXSettingsUpdate?jsonstr=" + jsonQuery, 
    dataType: "json", 
    async: false, 
    success: function (result) { 
     if (result === "SUCCESS") { 
      TypeUpdateSuccess("Updated"); 
     } else { 
      TypeUpdateFail("Failure"); 
     } 
    }, 
    error: function (x, e) { 
     showAlert("ERROR - " + e, "alert-danger"); 
    } 
}); 
+2

「JSON.stringify」を使用してJavaScriptオブジェクト(例: '{LoadFileSeparator:...}')を渡すと、コードを読みやすくすることができます。手でJSON文字列を構築する必要があります。 –

+1

^^いつもJSONを手作業で構築しないのが最善です。 (またはXMLなど) –

+0

サイドノート:「セパレータ」という単語は、「セパレータ」ではなく「セパレータ」(「p」の後の「a」)という綴りです。 –

答えて

2

GET操作を実行していて、JSONを完全にアンコードされたURLにダンプします。当然のことながら、最初の無効なURI文字(#はURIのフラグメント部分を導入するためのものです)で切り捨てられます。

はあなたがURIに入れURIエンコード何もする必要があります。

url: "/Admin/AJAXSettingsUpdate?jsonstr=" + encodeURIComponent(jsonQuery) 

サイドノートを:John Weisz points outとして、手でJSON文字列を構築すると、エラーが発生しやすいと読みにくいです。代わりに、送信したい構造を構築し、その後、JSONにそれを回すためにJSON.stringifyを使用します。これらのキーのすべてが有効な識別子名があるので、キーの周り

var jsonQuery = JSON.stringify({ 
    "LoadFileSeperator": LoadFileSeperator, // Left original spelling here 
    "MakeUpperCase": MakeUpperCase, 
    "PreAdviceGate": PreAdviceGate, 
    "PreAdviceRail": PreAdviceRail, 
    "PreAdviceBirth": PreAdviceBirth 
}); 

(引用符は、この場合はオプションですが、

可読性を向上させることに加えて、必要なすべてのエスケープ処理を確実に実行します。 (例えば、これらの変数のいずれかが"または\や改行が含まれていた場合や、他の文字の数のいずれかが、you'd'veが無効なJSONになってしまった。)

そしてES2015で、それもなりますなぜなら、推論プロパティ名の単純:

// REQUIRES ES2015 SUPPORT 
let jsonQuery = JSON.stringify({ 
    LoadFileSeperator, // Left original spelling here 
    MakeUpperCase, 
    PreAdviceGate, 
    PreAdviceRail, 
    PreAdviceBirth 
}); 

あなたが推測されたプロパティ名を使用して、JavaScriptエンジンの推論を使用すると、その値を提供する変数の名前からプロパティの名前(割り出し)を。


サイドノート2:あなたは、POSTでJSONを送信することができた場合は、GETではない:しかし、サーバー側での変更が必要になる

$.ajax({ 
    type: "POST", 
    url: "/Admin/AJAXSettingsUpdate",  // *** 
    dataType: "json", 
    contentType: "application/json",   // *** 
    data: jsonQuery,       // *** 
    async: false, 
    success: function(result) { 
     if (result === "SUCCESS") { 
      TypeUpdateSuccess("Updated"); 
     } 
     else { 
      TypeUpdateFail("Failure"); 

     } 
    }, 
    error: function(x, e) { 
     showAlert("ERROR - " + e, "alert-danger"); 
    } 
}); 

+1

暗黙のプロパティ名について知りませんでした。クール! – pinkfloydx33

+0

@ pinkfloydx33:申し訳ありませんが、私はそれらを「推定」プロパティ名(つまり、JavaScriptエンジンが名前を推論する)と呼ぶべきです。 :-) –

+0

彼らは何を呼んでも、私はそれらについて知らなかった。どちらかというとかなり涼しい。残念ながら私の会社は遺産を扱います。つまり、私が書いたjsのほとんどがie8-10で働かなければならないので、私が本当にしたいと思うように私は最新ではありません。新しいことを学ぶのはいつも素晴らしいです。 – pinkfloydx33

関連する問題