AJAX 操作完成它的工作,但总是出错

Posted

技术标签:

【中文标题】AJAX 操作完成它的工作,但总是出错【英文标题】:AJAX operation does its work, but always get error 【发布时间】:2014-07-16 05:52:34 【问题描述】:

我有以下 AJAX:

$.ajax(
          url: url,
          data: "url" : hangOutUrl, "participants" : params,
          dataType: 'jsonp',
          success: function()
            console.log("Connected");
          ,
          error: function(xhr, textStatus, error) 
          console.log("Impossible to connect");
          console.log(xhr.statusText);
          console.log(textStatus);
          console.log(error);
      
        );

这是我控制器上的代码

def hangout_started

    #Get information from hangout using ajax and widget
    url = params[:url]
    participants = params[:participants].split(/-/)


    #Find users 
    caller1 = Kid.where(username: participants[0]).first
    caller2 = Kid.where(username: participants[1]).first

    #Set all users to busy
    caller1.set_busy_status!

    #Create REDIS row with user and URL 

    REDIS.sadd "hangout:#caller2.id.to_s", url
    REDIS.expire "hangout:#caller2.id.to_s", 60

    respond_to do |format|
        format.json  head :ok 
      end


  end

这项工作很完美,只是我的控制台日志上总是显示“无法连接”。为什么我总是进入我的错误函数?

错误函数并从浏览器控制台发布错误:

消息:“jQuery211019731531548313797_1401196032110 未被调用” 堆栈:“错误:jQuery211019731531548313797_1401196032110 在 h.jsonp.b.dataTypes 的 Function.n.extend.error (https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js:2:1821)↵ 没有被调用↵。(匿名函数).b.converters.script json (https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js:4:16293)↵在 vc (https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js:4:7397)↵ 在 x (https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js:4:10802)↵ 在 htmlScriptElement.n.prop.on.c (https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js:4:15583)↵ 在 HTMLScriptElement.n.event.dispatch (https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js:3:6404)↵ 在 HTMLScriptElement.r .handle (https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js:3:3179)"

【问题讨论】:

很难说没有更多信息。将参数记录到error 函数。 没有错误,只是进入我的错误:function() console.log("Impossible to connect"); 但没有错误,一切正常 不过,error: function(jqXHR jqXHR, String textStatus, String errorThrown) console.log("Impossible to connect: " + textStatus + "; " + errorThrown); 之类的内容可能会帮助您找到罪魁祸首。 我收到此错误:hangout-blabloo.js:37 错误消息:“未调用 jQuery21107414210103452206_1401189257306”堆栈:“错误:未调用 jQuery21107414210103452206_1401189257306 【参考方案1】:

Ajax

关于$.ajax 你需要知道的一些事情——当你使用error 回调时,这是由于你的ajax 遇到了一个实际错误。我曾经认为是如果您的应用返回错误 - 这是错误的:

success: 适用于每次您的 ajax 访问 URL 并传递请求时 error: 适用于每次您的 ajax 无法正确访问 URL 时

这意味着如果错误出现在您的控制器中,我相信它会从您的控制器返回 success 回调


修复

对于你,我会推荐这个:

    确定您的ajax 是正确的url(您的代码中没有详细说明url) 确保您已将 jquery 包含在您的 javascript application js 中 使用一种方法从您的ajax 中捕获返回的error 尝试使用json

您可能希望将您的ajax 更改为this:

$.ajax(
     url: url,
     data: "url" : hangOutUrl, "participants" : params,
     dataType: 'json',
     success: function()
        console.log("Connected");
     ,
     error: function(jqXHR,error, errorThrown)   
           if(jqXHR.status&&jqXHR.status==400)
                alert(jqXHR.responseText); 
           else
               alert("Something went wrong");
           
      
);

这将使您能够正确捕获错误响应,从而使您能够正确显示错误。您可以通过查看以下内容来做到这一点:


如果你给我一些工作,我会更好地帮助你!

【讨论】:

您好 Rich,感谢您的帖子。好吧,我会尝试解释我想要做什么。这是一个谷歌环聊小部件,当小部件启动时,我将环聊网址发送到我的应用程序,以便向用户 2 显示有人正在呼叫他。 ajax 代码调用我的 /hangout_started url,然后执行我的控制器的操作,这很好用,但是当我检查控制台时,我总是发现我的 ajax 调用的错误函数的消息。我将使用错误函数和错误更新代码。 谢谢琼!我曾经使用过hangout widget,所以我希望我能消化你更新的回复。不管怎样,我想帮你! 哦,我忘了告诉你我正在使用 jsonp,因为这是我找到的唯一方法,因为当我使用 json 时,我总是得到 XMLHttpRequest cannot load bla bla bla NO 'Access-Control-Allow-Origin',我尝试了很多代码来使 CORS 工作,但唯一适合我的选项是使用 jsonp。 CORS 问题...您在连接外部服务器吗?如果是这样,您能否更改 CORS 政策以允许您的域? 我解决了,我没有 json 视图:s 并且解决了我的问题。谢谢

以上是关于AJAX 操作完成它的工作,但总是出错的主要内容,如果未能解决你的问题,请参考以下文章

即使发生更新,jquery ajax 也总是出错

请求数据成功,但回调方法出错,请检查自定义load回调函数

Ajax 调用 restful WS 总是出错(fiddler 得到很好的响应)

在 asp.net webservices 中使用 jQuery AJAX 总是出错:而不是成功:

等待 ajax 更改时 Webbrowser 出错

PHP邮件函数发送电子邮件,但AJAX函数出错