代码之家  ›  专栏  ›  技术社区  ›  cpjolicoeur

jQuery+Rails+ajaxForm+js.erb问题

  •  2
  • cpjolicoeur  · 技术社区  · 15 年前

    我有一个让我发疯的问题,根据我在网上看到和读到的一切,它应该可以正常工作。

    我在Rails应用程序中使用jQuery而不是prototype,并且使用ajaxForm插件通过ajax提交一些表单数据。表单数据被精细地提交,相应的控制器动作被调用为精细,js类型的正确respond_to block被调用为精细。

    问题在于*.js.erb文件的内容被返回到客户端浏览器,而不是解释为javascript。它实际上什么也没发生。是的,我已经设置了数据类型:“script”,但它仍然不起作用。我也尝试过不使用ajaxForm插件,在表单提交时手动使用$.post函数,但结果仍然相同。

    $("#purchase-item-form").ajaxForm({ 
      dataType: 'script'
    });
    

    jQuery.ajaxSetup({
      'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }
    });
    

    在我的action*.js.erb文件中,我目前只有一条警告语句,以帮助调试问题,直到我能够解决它为止:

    alert("action processed successfully");
    

    这在firefox或safari中根本不起作用。如果我查看firebug控制台,我可以看到alert语句作为ajax调用的响应返回,只是客户端没有将其作为javascript进行评估。

    仅供参考,我现在运行的是Rails 2.3.4和jQuery 1.3.2,如果这很重要的话

    1 回复  |  直到 15 年前
        1
  •  2
  •   Community CDub    8 年前

    我撞上了火车 准确的 同样的问题。你必须手动操作 eval 返回的代码。我不记得为什么它没有被评估,但是我使用了和你一样的插件,这个插件修复了它。

    编辑1: 阅读 article 因为它帮助解决了问题。

    请尝试以下操作:

    $("#purchase-item-form").ajaxForm({ 
      dataType: 'script',
      success: evalResponse
    });
    
    function evalResponse(responseText, statusText) {
      eval(responseText);
    }
    

    here 更多信息。