1

現在、JQuery で AJAX を使用して JSON を API サーバーに送信しています。ただし、JSON.stringify() を使用すると JSON 文字列をエスケープしているサーバーに問題があるようですが、別のサーバーではまったく同じコードを使用すると問題なく動作します。

これは、stringify を使用している Javascript オブジェクトの例です。

{"jsonrpc":"2.0","method":"get_contacts","params":["4345ert343t34t34t4e564",
{"campaigns":["AI5D"]}],"id":1} 

ここの例から作業しています https://github.com/GetResponse/DevZone/blob/master/API/examples/javascript_synopsis.html

あるサーバーでは、二重引用符がバックスラッシュでエスケープされており、API サーバーが解析エラーで応答する原因となっています。これは明らかに正しくないためです。別のサーバーでは、エスケープは存在せず、API は正常に動作します。両方のサーバーでまったく同じコードが使用されています。

何が原因なのか誰にもわかりませんか?エンコードの問題でしょうか?注意すべきことの 1 つは、あるサーバーで WYSIWYG エディターを介して JavaScript を入力する必要があることですが、JavaScript はページの読み込み時に正しく表示されるように見えます。

私はこれを理解しようと長い時間を費やしてきたので、誰かが素晴らしいアイデアを持っていれば.

編集:

私が使用しているJSコードは次のとおりです。

var api_key = '4345ert343t34t34t4e564';
var api_url = 'http://api2.getresponse.com';            
var CAMPAIGN_ID = 'AI5D';

var data = JSON.stringify({
"jsonrpc"   : "2.0",
"method"    : "get_contacts",
"params"    : [
        api_key,
        {
            "campaigns" : ["AI5D"] 
        }
    ],
"id"        : 1
});

console.log(data);

jQuery.ajax({
    url         : api_url,
    data        : data,
    type        : "POST",
    contentType : "application/json",
    dataType    : "json",
    crossDomain : true,
    async       : true,
    success     : function(response) 
    {                        
        alert(JSON.stringify(response));
        console.log(JSON.stringify(response));
    }
4

1 に答える 1

3

問題の解決策を発見しました!

ヘッダー内の Mootools の古いバージョン (v.1.2.4) が JSON.stringify() と競合していたようです。古い Mootools ライブラリを削除すると、問題が修正されます。

どうやら Mootools v1.2.4 は JSON.stringify() をオーバーライドしようとしていますが、これは正しくない独自の変更であり、バックスラッシュのエスケープの問題を引き起こしています。この問題はここで見つかりましたhttp://outsourceror.blogspot.co.uk/2011/04/mootools-intrudes-on-native-json-and.html

Mootools を最新バージョンに更新すると、このhttp://mootools.net/downloadも修正されるはずです。

于 2013-11-04T23:04:53.583 に答える