2013-10-03 60 views
0

我正在运行使用Ajax和Sinatra的应用程序。我想发一个POST参数到我的app.rb文件中。Ajax返回错误,但它工作

  • 我app.rb

    post '/game/moves' do 
        @square = params[:square] 
        puts @square 
        content_type :json 
        { :success => 'Data successfully transmitted' }.to_json 
    end 
    
  • 我的观点

    $.ajax({ 
        url: 'moves', 
        data: {square:square}, 
        type: 'POST', 
        dataType: 'json', 
        success: function() { 
        alert("Success"); 
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
        alert(XMLHttpRequest + textStatus + errorThrown); 
        } 
    }); 
    

它返回警报 “的翻译:错误”,但我的控制台上,我看到我成功检索了POST参数。所以它可以工作,但我无法进入代码的“成功”部分,而是陷入错误的一部分。

我也尝试用html类型替换json类型,并且删除了我的app.rb文件中的返回值,无济于事(完全相同的错误)。

+0

你看过你的控制台中的服务器返回的内容吗? – epascarello

+1

在您的错误处理程序中,请尝试'console.log(arguments)'并查看记录到您的JavaScript控制台的内容。此外,请检查浏览器开发工具的网络选项卡,以查看该请求是否符合您的期望。 –

+0

我在猜parseerror? – adeneo

回答

0

我找到了一个工作解决方案。在这里,我成功地检索了“它的工作!”之上的参数。警报。那是我想要的。

正如您可以注意到的,我没有将“async”设置为false。我不知道为什么我必须这样做,也不知道为什么当我不这样做时不工作。我不介意它是否设置为假,因为它有效,但如果有人能告诉我可能的原因,它仍然可以帮助我。谢谢。

下面是完整的代码(函数发送是在obstrusive方式(用一个行HTML的onclick调用),因为我需要的PARAMS Xi和Yi)

  • 视图

    function send(xi,yi) { 
        info = []; 
        info[0] = xi; 
        info[1] = yi; 
        $.ajax({ 
        type: 'POST', 
        url: 'moves', 
        dataType: 'text', 
        async: false, 
        data: {square:info}, 
        success: function(token) { 
         alert(token) 
        }, 
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
         alert(XMLHttpRequest, textStatus, errorThrown); 
        } 
        }); 
    } 
    
  • App.rb

    post '/game/moves' do 
        if params[:square] 
        "It works !" 
        end 
    end