0

我有一个运行良好的 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)

警报确认 data.name 已从服务器返回的 JSON 对象中正确解析。但是,我想在 jQuery.ajaxSuccess 调用中访问它。我可以这样做

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

它工作正常,但我想知道这是否不是最佳实践。我解析 JSON 两次以获得我想要的,这不是一个巨大的开销,但最好避免。ajaxSuccess 中的这些参数之一是否已经包含我已解析的 Javascript 对象,我可以在原始 .ajax 调用中轻松访问该对象?

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

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

于 2012-07-30T16:36:53.013 回答