我首先想通过json上传文件并以这种方式获得回复。
我正在使用:
我很快发现you can't get a reponse in json。所以,我遵循这个建议并以文本形式返回。
删除pre标签后,我能够正常工作。丑陋的解决方案,但这是一个丑陋的问题。
现在,我的问题是处理错误。
$('form#new_image').submit(function() {
$(this).ajaxSubmit({
dataType: 'text',
beforeSubmit: showLoading,
success: imageUploadSuccess,
error: imageUploadError
});
return false;
});
function imageUploadSuccess(data) {
var jsonObject = $.parseJSON((/<pre>(.+)<\/pre>/.exec(data))[1]);
//Do something
}
function imageUploadError(data) {
alert("FAIL!");
}
即使我回复错误,也会始终执行成功回调(imageUploadSuccess)。
def create
@image = Image.new params[:file]
@image.imageable_type = params[:imageable_type]
@image.imageable_id = params[:imageable_id]
respond_to do |f|
if @image.save
logger.debug "PASSED"
f.text {render :text => @image.to_json}
else
logger.debug "FAIL"
f.text { render :text => "Fail!", :status => 500 }
end
end
end
现在,虽然当它失败时我可以在其中返回一个带有success: false
的json对象,但只是感觉很脏,成功回调总是被执行。
如何使用错误回调?
答案 0 :(得分:1)
以下是一些用于提交ajax的通用jQuery代码:
$('#btn-submit').click(function(event){
event.preventDefault();
$.ajax({
type: "POST",
url: $('form').attr('action'),
data: $('form').serialize(),
success: function(data) {},
error: function(data) {}
});
});
编辑:
我刚看到你愿意用ajax上传文件。 Ajax不允许这种处理,但有很多替代方案。
我在这里举两个例子(两个分支):https://github.com/apneadiving/Pic-upload---Crop-in-Ajax
答案 1 :(得分:0)
看来你是否使用.ajax或.ajaxForm来提交它,只要服务器响应,就会执行success
回调。
所以,我必须根据具体情况回复具有success: true/false
的特殊结构的json。最好用控制器动作说明(我在这里使用的是inherited_resources,但是你明白了):
def create
create! do |success, failure|
success.html {redirect_to to}
success.text do
image = {
:id => @image.id,
:file_name => @image.file_name,
:success => true
}
render :text => image.to_json
end
failure.text do
image = {
:success => false,
:errors => @image.errors
}
render :text => image.to_json
end
success.js
end
end