0

私は(CoffeeScriptで)そのようにうまく機能するajax呼び出しを持っています。

ajaxElement.change ->
  $(this).data('request','initiated')
  $.ajax
    type: 'PUT'
    url: $(this).closest('form').data('update-url')
    data: $(this).serialize()
    dataType: 'json'
    success: (data) ->
      alert(data.name)

アラートは、サーバーから返されたJSONオブジェクトからdata.nameが正しく解析されたことを確認します。ただし、jQuery.ajaxSuccess呼び出しでこれにアクセスしたいと思います。私はそうすることができます

$('form.invoice-form').ajaxSuccess (event, xhr, options) ->
  response = $.parseJSON(xhr.responseText)
  alert(response.name)

正常に動作しますが、これがベストプラクティスではないかと思います。JSONを2回解析して、必要なものを取得しています。これは大きなオーバーヘッドではありませんが、おそらく回避するのが最善です。ajaxSuccessのこれらのパラメーターの1つに、元の.ajax呼び出しで簡単にアクセスできる解析済みのJavascriptオブジェクトが既に含まれているものはありますか?

4

2 に答える 2

1

成功コールバックはajaxSuccessコールバックの前に呼び出されると思います。それで、それを念頭に置いて、フォームにjsonデータを保存し、次のようなことを行うことができますか?私はコーヒースクリプトを書きません、構文上のブーブーについて謝罪します

ajaxElement.change ->
  $(this).data('request','initiated')
  $.ajax
    type: 'PUT'
    url: $(this).closest('form').data('update-url')
    data: $(this).serialize()
    dataType: 'json'
    success: (data) ->
      $(this).closest('form').data('lastdata',data)
      alert(data.name)

//...
$('form.invoice-form').ajaxSuccess (event, xhr, options) ->
    lastData = $(this).data('lastdata')
    alert(lastData.name)
于 2012-07-29T03:47:11.237 に答える
0

If your success function do nothing with parsed JSON you can just ommit dataType (or set it for text) - then jQuery will return simple text, and you will parse it only once (in your second function).

于 2012-07-30T16:36:53.013 に答える