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 操作完成它的工作,但总是出错的主要内容,如果未能解决你的问题,请参考以下文章
Ajax 调用 restful WS 总是出错(fiddler 得到很好的响应)