在本文中,我们将带你了解jQuery.ajax–always()并不总是在运行在这篇文章中,我们将为您详细介绍jQuery.ajax–always()并不总是在运行的方方面面,并解答ajax不走suc
在本文中,我们将带你了解jQuery.ajax – always()并不总是在运行在这篇文章中,我们将为您详细介绍jQuery.ajax – always()并不总是在运行的方方面面,并解答ajax不走success也不走error常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的ajax jquery总是运行错误、ajax – jQuery .always()似乎在$.get()请求实际完成之前触发、Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax、javascript – 为什么我总是在jquery ajax的情况下得到401(未授权)错误。
本文目录一览:- jQuery.ajax – always()并不总是在运行(ajax不走success也不走error)
- ajax jquery总是运行错误
- ajax – jQuery .always()似乎在$.get()请求实际完成之前触发
- Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax
- javascript – 为什么我总是在jquery ajax的情况下得到401(未授权)错误
jQuery.ajax – always()并不总是在运行(ajax不走success也不走error)
var jqXHR = jQuery.ajax({ type: 'GET',async: false,cache: false,url: 'http://ip.jsontest.com.BADURL/',contentType: 'application/json; charset=UTF-8',crossDomain: true,dataType: 'jsonp' }) .done(function (data,textStatus,jqXHR) { console.log('Your IP is ' + data.ip); console.log('done was called'); }) .fail(function (jqXHR,errorThrown) { console.log('fail was called'); }) .always(function (dataOrjqXHR,jqXHRorErrorThrown) { console.log('always was called'); });
您可以在使用jQuery 1.9.1的jquery.com的控制台中运行它.我使用jQuery 1.11.1有相同的行为.当网址不可用时,我总是需要触发以处理时间.我在IE11,Chrome 38和FF 33中都有相同的行为.我做错了什么或者这是一个错误?
谢谢.
解决方法
Note: This handler is not called for cross-domain script and cross-domain JSONP requests.
另请注意,不支持同步JSONP调用:
Cross-domain requests and dataType: “jsonp” requests do not support synchronous operation.
解决方法通常涉及1)为调用设置超时或2)使用插件添加更多典型的错误功能.
1)设置超时(和async true)
var jqXHR = jQuery.ajax({ type: 'GET',async: true,dataType: 'jsonp',timeout: 2000 }) .fail(function (jqXHR,errorThrown) { console.log('fail was called'); }) .done(function (data,jqXHR) { console.log('Your IP is ' + data.ip); console.log('done was called'); }) .always(function (dataOrjqXHR,jqXHRorErrorThrown) { console.log('always was called'); });
2)jQuery JSONP plugin增加了错误恢复功能.
ajax jquery总是运行错误
这里是我的代码示例
function FindContact(CompanyName,DivisionName,FirstName,LastName) { $.ajax({ url: 'Path',dataType: "json",async:false,type:'post',data: {'FirstName':FirstName,'LastName':LastName,'DivisionName':DivisionName,'CompanyName':CompanyName},success: displayContacts,error: ErrorMsg }); }
为了摆脱这个我用这个
function ErrorMsg(result) { if (result.status == 200 && result.statusText == 'OK') { displayContacts(result); } else { alert("Failed : " + result.status + ' ' + result.statusText); } }
这是很困难的,因为我需要为每个ajax请求创建这样的方法。
为什么会运行错误代码第1?
请帮忙!
function FindContact(CompanyName,dataType: "html or json",error: ErrorMsg }); }
快速检查json是否有效是将dataType转换为html,看到成功被触发。如果它比你的json无效,如果你仍然遇到同样的问题,别的错误。
检查是否有效的json被返回的另一个方法是打开firebug,当请求发送时,单击响应选项卡,复制响应并获取到jsonlint.com以检查其是否有效。
Jquery ajax docs
ajax – jQuery .always()似乎在$.get()请求实际完成之前触发
代码
var apiRequest = 'some/url/'; // fetch list of video embed codes $.get( apiRequest,function( embed_codes ) { // added this per Explosion Pills' answer var jqxhrs = []; // for each embed code,get video details (name,duration,etc.) for ( var i = 0; i < embed_codes.length; i++ ) { var videoDetailsRequest = '/v2/assets/' + embed_codes[i]; //..declare vars.. // fetch video details var jqxhr = $.get( videoDetailsRequest,function( video ) { // build playlist entry for each video playlistItem = '<li><h3>' + video.name + '</h3><p>' + video.description + '</p></li>'; // create object of video HTML,with key = "video name" for sorting later videoArray[video.name] = playlistItem; },'jsonp' ) // added this per Explosion Pills' answer jqxhrs.push( jqxhr ); } // updated from jqxhr.always( function() { $.when( jqxhrs ).always( function() { // create array of keys for ( k in videoArray ) { if ( videoArray.hasOwnProperty( k ) ) { keys.push( k ); } } // append alphabetized list of videos to the page... }); },'jsonp' );
代码的作用
本质上,代码执行此操作:循环浏览视频嵌入代码列表.对于for循环的每次迭代,获取有关每个视频的详细信息并将这些细节推送到多维数组中.完成获取所有视频后,请调用.always()回调,该回调将视频分类为按字母顺序排列的播放列表并附加到页面.
问题
在获取所有视频之前,有时会调用.always()回调.播放列表中有9个视频,但有时在回拨被触发之前只返回6或7个视频,这意味着我的播放列表有点短.我已通过alert()键数和使用控制台对此进行了测试.我看到的是6-7个视频将返回,然后回调中的alert()会触发,然后返回剩余的视频.
我的问题:
为什么会这样?我认为在AJAX请求完成后触发了.always()回调.这是不是意味着在回调被触发之前应该返回所有视频?我怀疑它与AJAX中的“A”有关,但我认为always()回调的目的是解释这一点.非常感谢任何帮助我理解的东西.谢谢!
解决方法
对于外部请求,这很容易.只需将一个呼叫链接到.always(或.done,我相信它们是相同的,后者是首选).
如果您希望在完成所有其他ajax请求后完成,则可以使用$.when,它会检查所有延迟对象何时完成:
var jqxhrs = []; ...for loop... var jqxhr = $.get( videoDetailsRequest ... },'jsonp'); jqxhrs.push(jqxhr); ... $.when.apply(undefined,jqxhrs).always(function () { /* your intended callback */
或者,您可以使用.pipe:
//Create initial deferred object var jqxhr = $.Deferred(); ...for loop... jqxhr = jqxhr.pipe($.get(... jqxhr.always(function () { /* callback */
Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax
javascript – 为什么我总是在jquery ajax的情况下得到401(未授权)错误
我在jquery中使用ajax.当我提交我的价值时,我每次都会收到此错误.请让我知道我哪里错了?
<script>
$(document).ready(function(){
$("button").click(function(){
$.ajax({
url: 'url_path',
data: {
user : {
email : $('#email').val(),
password : $('#password').val()
} ,
vendor_identifier : '3231-43423-fdsdfs'
},
dataType: 'jsonp',
//method: 'POST',
type:'POST',
success: function(msg) {
var msg = $.parseJSON(msg);
console.log(msg);
}
});
});
});
</script>
解决方法:
在您的示例中,您似乎正在访问某些需要通过电子邮件和密码进行身份验证的API. 401 Unauthorized只是说远程服务器由于某种原因无法使用电子邮件和密码以及您随请求发送的vendor_identifier的组合来验证用户.
可能是API在Authorization HTTP标头中需要Basic Authentication形式的用户名(电子邮件)和密码.如果您使用的是JQuery> = 1.7.2,那么它将为您创建Authorization标头.
看到这个问题:How to use Basic Auth with jQuery and AJAX?
$(document).ready(function(){
$("button").click(function(){
$.ajax({
url: 'url_path',
data: {
user : {
email : $('#email').val(),
password : $('#password').val()
},
vendor_identifier : '3231-43423-fdsdfs'
},
username: $('#email').val(),
password: $('#password').val(),
dataType: 'jsonp',
success: function(msg) {
var msg = $.parseJSON(msg);
console.log(msg);
}
});
今天关于jQuery.ajax – always()并不总是在运行和ajax不走success也不走error的分享就到这里,希望大家有所收获,若想了解更多关于ajax jquery总是运行错误、ajax – jQuery .always()似乎在$.get()请求实际完成之前触发、Ajax 技术一 ajax提交表单 jquery ajax教程 js ajax、javascript – 为什么我总是在jquery ajax的情况下得到401(未授权)错误等相关知识,可以在本站进行查询。
本文标签: