这可能是个愚蠢的问题。抱歉,如果是这样的话。
在带有最新 jquery-rails gem“1.0.12”的 Rails 3 应用程序上,我尝试替换 ajax 调用中的 html
$.ajax({
type: "POST",
cache: false,
url: url,
data: data,
error: function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
},
success: function(msg){
alert('Load was performed.');
}
});
从 Controller 中,我使用 js.erb 文件中的 htm 代码应答 ajax 调用 js.erb 文件的内容是
<img src="<%=@test%>" id="<%=@test_id%>">
已收到响应,但触发了 parseError 错误。 响应 header 中的内容类型为
Content-Type:text/javascript; charset=utf-8
错误回调中的 jqXHR 响应包含此内容
Object
abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
isRejected: function () {
isResolved: function () {
overrideMimeType: function ( type ) {
pipe: function ( fnDone, fnFail ) {
promise: function ( obj ) {
readyState: 4
responseText: "<img src="/images/author_tests/copywriter_photo_2.jpg" id="copywriter-test-4e1c3eb5e09c1657fb000003">"
setRequestHeader: function ( name, value ) {
status: 200
statusCode: function ( map ) {
statusText: "parsererror"
success: function () {
then: function ( doneCallbacks, failCallbacks ) {
__proto__: Object
我尝试将数据类型设置为文本,但这样做服务器会抛出错误
ActionView::MissingTemplate (Missing template [.....] with {:locale=>[:"en-US", :"en-US"], :handlers=>[:rhtml, :rxml, :builder, :haml, :erb, :rjs], :formats=>[:text, "*/*"]}
我做错了什么?
最佳答案
你返回的实际上是HTML,而不是JS。 js.erb 文件的内容被传递到 javascript 引擎进行评估,因此它会阻塞您的 HTML(因为这不是有效的 javascript)。
由于您只想返回 HTML,并且想要替换页面上的元素,请尝试 jQuery .load()方法,并为您的 URL 提供扩展名 .html。然后将 .js.erb 文件的内容移动到响应 Controller 的 html 格式的任何内容。
关于ajax - Rails 3 jquery ajax 调用失败,statusText : "parsererror",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697804/