2010-03-17 103 views
0

我使用的Rails 3.0.0 Beta版format.js响应不执行

下一个动作,我的看法RJS返回JavaScript,但不执行

代码在萤火虫我在响应

$('polaroids').insert("<li>\n <a title=\"4204497503_a0c43c561d.jpg\" href=\"#\">\n <img alt=\"4204497503_a0c43c561d.jpg\" src=\"/system/photos/279/original/4204497503_a0c43c561d.jpg?1268857318\" />\n <\/a>\n<\/li>") 

这里是生成请求

function send(file, url) { 
    try { 
     var xhr = new XMLHttpRequest; 

     var boundary = generateBoundary(); 

     var contentType = "multipart/form-data; boundary=" + boundary; 

     xhr.upload.addEventListener("loadstart", (function(e){ 
      $('progress_'+file.name).update('0%'); 
     }), false); 

     xhr.upload.addEventListener("progress", (function(e) { 
       if (e.lengthComputable) { 
        var percentage = Math.round((e.loaded * 100)/e.total); 
        $('progress_'+file.name).update(percentage + '%'); 
       } 
     }), false); 


     xhr.open("POST", url, true); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState === 4) { 
       // done 
      } 
     }; 

     xhr.setRequestHeader("Content-Type", contentType); 
     xhr.setRequestHeader("Accept", "text/javascript"); 

     var CRLF = "\r\n"; 
     var request = "--" + boundary + CRLF; 

     request += 'Content-Disposition: form-data; '; 
     request += 'name="' + 'photo[name]' + '"' + CRLF + CRLF; 
     request += file.name + CRLF; 

     request += "--" + boundary + CRLF; 

     request += 'Content-Disposition: form-data; '; 
     request += 'name="' + 'photo[photo]' + '"; '; 
     request += 'filename="'+ file.fileName + '"' + CRLF; 

     request += "Content-Type: application/octet-stream" + CRLF + CRLF; 
     request += file.value + CRLF; 
     request+= "--" + boundary + "--" + CRLF; 

     xhr.sendAsBinary(request); 

    } catch(e) { 
     alert('send Error: ' + e); 
    } 
} 

这里是对照的JavaScript奥勒

def remote_create 
    @photo = Photo.new(params[:photo]) 
    @photo.save 
    respond_to do |format| 
     format.js 
    end 
    end 

这里是响应头

Response Headers 
Etag "7343b21b2f062fb74b7d5f32e3a83c2c" 
Connection Keep-Alive 
Content-Type text/javascript; charset=utf-8 
Date Wed, 17 Mar 2010 20:21:58 GMT 
Server WEBrick/1.3.1 (Ruby/1.8.7/2008-08-11) 
X-Runtime 0.060497 
Content-Length 220 
Cache-Control max-age=0, private, must-revalidate 
Set-Cookie _photos_session=BAh7ByIQX2NzcmZfdG9rZW4iMS9OWnpOZUR6UGQ2UDhvbGt5YWpTWXhJcFR2YjRHOEhzZHlIbmdMblRlMWs9Ig9zZXNzaW9uX2lkIiUxNjlhOWYzNjQxODE2N2NjN2FiNmYzY2VkYmU3OTgwYQ%3D%3D--022d7202178b2cc7bf968e558c2ae67ecef1fb74; path=/; HttpOnly 

是否有什么特别的东西,使其工作要求?

+0

粘贴你的JS也用于调用动作。 – jonnii 2010-03-17 20:31:56

+0

它的完成,我使用sendAsBinary,一个新的Firefox方法提交一个xhr请求的文件 – denisjacquemin 2010-03-17 20:43:51

+0

你可以发布控制器代码吗? – jonnii 2010-03-17 21:51:35

回答

0

我找到了解决方案,我的Ajax请求是手动构建的,我没有使用Prototype或jQuery。 要在响应执行的JavaScript,我必须添加以下代码

xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     eval(xhr.responseText || ''); 
    } 
}; 
0

的错误是你的JS:

$('polaroids').insert("<li>\n <a title=\"4204497503_a0c43c561d.jpg\" href=\"#\">\n <img alt=\"4204497503_a0c43c561d.jpg\" src=\"/system/photos/279/original/4204497503_a0c43c561d.jpg?1268857318\" />\n <\/a>\n<\/li>") 

你可能希望通过一个idclass但你还$('polaroids')靶向div或某些元素,尝试或许$('.polaroids')$('#polaroids')取决于你的HTML是什么喜欢。

+0

感谢您的回答,我使用原型(而不是jQuery),$('polaroids')在Firebug中执行它时很好用,我也尝试了一个简单的警告('hello'),但它也不起作用。 – denisjacquemin 2010-03-19 08:13:09

1

对于那些像我一样,运行到这个问题与Ajax File Uploader和Carrierwave不执行返回的JavaScript,这是因为同样的事情。这是因为File-Uploader被编写为假定所有返回给它的是JSON,并且重写它以评估responseText而不是将其放入变量中修复该问题。

我发布完全没有人花费数小时思考错误是造成这种情况的原因。