Skip to content

Instantly share code, notes, and snippets.

@pehrlich
Created December 24, 2011 16:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pehrlich/1517686 to your computer and use it in GitHub Desktop.
Save pehrlich/1517686 to your computer and use it in GitHub Desktop.
handle json with query mobile
# someday: move to json response module?
def json_response(options)
logger.warn "JSON response: #{options}"
render json: options
end
def json_callback(method, args = [])
json_response({status: :window_callback, method: method, args: args})
end
def json_target_callback(method, args = [])
json_response({status: :target_callback, method: method, args: args})
end
def json_error(message = '')
# todo: automatically email me
json_response({status: :error, message: message})
end
def json_ok(message = '')
json_response({status: :ok, message: message})
end
def json_dialog_close
json_callback(:close_dialog)
end
# handle json response data
$(document).bind "pageload", ( e, data ) ->
# page is already in dom here. someday: prevent json pages form being added?
console.log 'pageload', e, data
if data.xhr.getResponseHeader('Content-Type').search(/application\/json/) != -1 # "application/json; charset=utf-8"
# remove bunk page from dom (for anti-caching reasons)
data.page.remove()
data.json = $.parseJSON(data.xhr.responseText)
$(this).trigger('pageloadjson', data)
data.deferred.reject(data.absUrl, data.options)
return false
# someday: handle json form validation
$(document).bind "pageloadjson", (e, data) ->
# todo: diable page chaching
console.log(e, data)
status = data.json.status
switch status
when 'window_callback' then window[data.json.method].apply(window, data.json.args)
# when 'target_callback' then $(e.target)[data.json.method].apply($(e.target), data.json.args)
when 'target_callback'
$target = $("[href='#{data.dataUrl}']")
$target[data.json.method].apply($target, data.json.args)
# because of jqm pos, e.target is not set right.
when 'ok' then p data.json.message
else p "#{data.json.status} - #{data.json.message}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment