0

次の出力を作成するページがあります。

<script>
  var JSONObject = { "groups":['1210103','1210103','1210103','1210405'],
                     "prices":['279,00','399,00','628,00','129,00'],
                     "titles":['','','','']
                    }; 
</script>

このページは ajax 呼び出しによって呼び出されます。

$.ajax({url:plink,success: function(result) { }

json 配列を受け取り、それらを通常の JavaScript 配列に渡す必要があります。それ、どうやったら出来るの?

私は試してみました:

result = jQuery.parseJSON(data);
mygroups = result.groups;
myprices = result.prices;
mylabels = result.titles;
4

1 に答える 1

2

JSON のみを生成するようにページを変更します。

{"groups":["1210103","1210103","1210103","1210405"],
 "prices":["279,00","399,00","628,00","129,00"],
 "titles":["","","",""]
}

JSON では、文字列の引用には ではなくを使用する必要があることに注意してください。"'

Content-Typeのヘッダーを返すようにしapplication/jsonます。なんらかの理由で応答に正しいヘッダーを設定できない場合は、呼び出しに追加するContent-Typeことで、jQuery に強制的に応答を JSON として処理させることができますが、正しい.dataType: 'json'ajaxcontent-Type

次に、ajax呼び出しのsuccessコールバックでは、3 つのプロパティ ( 、、 ) を持つ逆シリアル化されたオブジェクトresult既に存在します。これは、操作できる JavaScript 配列になります。groupspricestitles

実例| ソース


以下のコメントで、このページはタグが埋め込まれた完全な HTML ページであり、使用している CMS が原因でscript、タグのコンテンツ以外は制御できないと述べています。script

より柔軟な CMS に移行することを強くお勧めします。

それができるまで/できない場合は、ページをテキストとして受け取り、JSON を抽出するだけです。scriptタグを次のように変更します。

<script>
var JSONObject = /*XXX_JSONSTART_XXX*/{"groups":["1210103","1210103","1210103","1210405"],
 "prices":["279,00","399,00","628,00","129,00"],
 "titles":["","","",""]
}/*XXX_JSONEND_XXX*/;
</script>

マーカーに注意してください。次に、マーカー間の JSON を抽出して使用できます$.parseJSON。例:

(function($) {

  $.ajax({
    url: "http://jsbin.com/ecolok/1",
    dataType: "text",
    success: function(result) {
      var startMarker = "/*XXX_JSONSTART_XXX*/";
      var endMarker   = "/*XXX_JSONEND_XXX*/";
      var start, end;

      start = result.indexOf(startMarker);
      if (start === -1) {
        display("Start marker missing");
      }
      else {
        start += startMarker.length;
        end = result.indexOf(endMarker, start);
        if (end === -1) {
          display("End marker missing");
        }
        else {
          result = $.parseJSON(result.substring(start, end));
          display("result.groups.length = " + result.groups.length);
          display("result.prices.length = " + result.prices.length);
          display("result.titles.length = " + result.titles.length);
        }
      }
    }
  });

  function display(msg) {
    $("<p>").html(String(msg)).appendTo(document.body);
  }

})(jQuery);

ライブコピー| ソース

于 2013-02-27T09:39:22.427 に答える