2013-07-08 9 views
8

ページ側のjavascript:"???"を含む文字列を含むjQuery.ajaxデータの送信値が「jQuery19107363727174233645_1373301489648?」に変更されます。

var model = {"NumberOfCPUs":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"???"}; 

     var id = 0; 
     var success = false; 
     //send to server: 
     $.ajax(
      { 
       async: false, 
       data: JSON.stringify(model), 
       dataType: "json", 
       type: "post", 
       url: serverSideURL 

      }); 

実際にサーバに送信されます要求の内容:何が起こっている

{"NumberOfCPUs":"2","NumberOfCores":"4","OSType":"Linux","OSVersion":"jQuery19107363727174233645_1373301489648?"} 

?文字列 "???" jQueryの何らかの特殊な制御語や何か?

ありがとうございました。

+1

'processData:false'がこれを最もよく修正します。 – Ohgodwhy

+1

好奇心が強い:jQueryのどのバージョンを使用していますか? – Sumurai8

+0

なぜあなたは提出していますか?とにかく?ヌルかシングルだけではないのはなぜですか? – Petah

答えて

3

?? jsonp 要求のデータ内のコールバック名プレースホルダとして使用されます。したがって、jQueryはjsonpとして要求を「促進」します。

jqueryのバグトラッカー、ticket #12326

はそれがknown bug

contentType: "application/json; charset=utf-8" 
+0

これは解決します..素晴らしい.. :)ありがとう.. –

0

このプロパティを使用:AJAXを投稿するときは

とデータが "??" を持っていますそれをフォーマットします jQuery?

バグのコメントで明らかに修正されていませんが、修正済みとマークされています。問題は再開する必要があります。

策は明らかに、以下に、あなたのJSONラインを変更し、次のとおりです

var model = {NumberOfCPUs:"2",NumberOfCores:"4",OSType:"Linux",OSVersion:"???"}; 

し、それをシリアル化することが可能になります。この方法では、二重疑問符を置き換える正規表現がトリガーされません。

11

他の回答のバグのコメントを読んだ場合、実際のの問題は、json-stringを文字列化してdataに渡すという事実にあります。 dataは、クエリを含むString(たとえば、"a=asdf&b=qwer"またはObjectにキーと値が含まれているため、クエリに変換されます)が必要です。代わりに'{"a":"asdf","b":"qwer"}'のようなものを渡しています。Stringには、クエリではない文字列化された配列が含まれています。それは何らかの形でサーバーが理解できるデータを変換することを管理しますが、明らかにバグ/機能もトリガーします。

ソリューション

あなたはJSONオブジェクトでキー"a"を取得するために$_POST['a']を介してデータにアクセスする場合は1:

$.ajax({ 
    async: false, 
    data: model, //Pass the Array itself to the function 
    dataType: "json", 
    type: "post", 
    url: serverSideURL 
}); 

Source; Cowboy on jQuery bugs

ソリューション2

あなたはJSON文字列を取得する場合:この場合

$.ajax({ 
    async: false, 
    data: { 
     "MyLilString": JSON.stringify(model) 
    } 
    dataType: "json", 
    type: "post", 
    url: serverSideURL 
}); 

$_POST["MyLilString"]は、あなたが上json_decode()を使用できるシリアル化されたJSONを、含まれています。

は(Source; Ajpiano on jQuery bugs

別の暗示

私はコメントから抽出し(私は今見つけることができません-_- ')やったもう一つの提案falsejsonpを設定することです。

$.ajax({ 
    async: false, 
    data: model 
    dataType: "json", 
    type: "post", 
    url: serverSideURL, 
    jsonp: false 
}); 

これにより、jQueryがコールバック関数をリクエスト本体にも挿入しなくなります。

+0

正式なjqueryの問題はここで言及されています:[リンク](https://github.com/jquery/api.jquery.com/issues/ 878)とここにあります:[リンク](https://github.com/jquery/jquery/issues/1799) –

+0

解決策3が正しいです! – alexcasalboni

関連する問題