我可以在.ajaxSuccess中访问我的json对象而无需解析它吗?

时间:2012-07-29 03:30:42

标签: jquery ajax json coffeescript

我有一个像这样工作的ajax调用(在CoffeeScript中);

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两次以获得我想要的东西,这不是一个巨大的开销,但可能最好避免。 ajaxSuccess中的其中一个参数中是否有某些内容已经包含我在原始.ajax调用中可以轻松访问的已解析的Javascript对象?

2 个答案:

答案 0 :(得分:1)

我认为在ajaxSuccess回调之前调用成功回调。因此,考虑到这一点,您可以将json数据存储在表单上并执行以下操作吗? 我不写咖啡脚本,为任何语法booboos道歉

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)

答案 1 :(得分:0)

如果您的success函数对解析的JSON不执行任何操作,您可以省略dataType(或将其设置为text) - 然后jQuery将返回简单文本,并且您将仅解析它一次(在你的第二个功能中)。