2012-07-29 45 views
0

我有一个ajax调用,就像这样(在CoffeeScript中);我可以在.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) -> 
     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调用中可以轻松访问?

回答

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) 
+0

我可以证实这是有效的。 – brad 2012-07-29 03:57:08

0

如果您success功能无可奈何与解析的JSON你可以ommit dataType(或设置它text) - 然后jQuery将返回简单的文本,你只会解析它一次(在你的第二个函数中)。

相关问题