天道酬勤,学无止境

How do I get HTTP error response code in Jquery POST

I have a wrapper function used to send requests to a server, I need to do something specific if the server returns a code of 401 and I'm not sure how to get this data

 $.mobile.showPageLoadingMsg();    
$.post(apiUrl+method,p,function(d) {

    $.mobile.hidePageLoadingMsg();  
    console.log(d.success);
    console.log(d.message);

    if(d.success == true){
        window[callback](d.data);
    }
    else{
        if(d.message != null){
            alert(d.message);
        }  
    }
},'json')
.error(function() {
    //need to check for 401 status here to do something
    $.mobile.hidePageLoadingMsg();  
    alert("error");
});

If my server side code throws a 401 exception the jquery .error function picks this up just because its not 200 OK but I need to check if its a 401 code.

评论

In the error callback, check xhr.status where xhr is the first argument to the function.

Update on the "promise" method: as of jQuery 1.5 we can call the .fail() promise and get the status code like this:

$.post( "example.php", function() {
    alert( "success" );
}).fail(function(xhr) {
    console.log(xhr.status);
});

Note that .error() promise is removed as of jQuery 3.0

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何使用jQuery获取HTTP状态代码?(How do I get the HTTP status code with jQuery?)
    问题 我想检查页面是否返回状态码401。这可能吗? 这是我的尝试,但只返回0。 $.ajax({ url: "http://my-ip/test/test.php", data: {}, complete: function(xhr, statusText){ alert(xhr.status); } }); 回答1 这可以通过jQuery $.ajax()方法实现 $.ajax(serverUrl, { type: OutageViewModel.Id() == 0 ? "POST" : "PUT", data: dataToSave, statusCode: { 200: function (response) { alert('1'); AfterSavedAll(); }, 201: function (response) { alert('1'); AfterSavedAll(); }, 400: function (response) { alert('1'); bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function () { }); }, 404: function (response) { alert('1')
  • 使用POST的JQuery表单插件文件上传重定向到POST响应(JQuery Form Plugin File Upload using POST redirects to POST response)
    问题 请帮助大家,这是一个主要的障碍物! 我有一个使用NodeJS + jQuery Form Plugin + Typescript的项目,我正在尝试上传文件。 上传文件后,服​​务器将发送响应到POST消息,该消息将显示在屏幕上。 在屏幕上显示POST响应之前,文件确实已成功且完全上传。 我希望POST响应调用“成功”功能,而不是将页面重定向到显示JSON响应。 这是代码: $(new ID().setAsRoot().selectId()).append( "<form id=\"fileUploadForm\" accept-charset=\"utf-8\" method=\"post\" action=\"/upload\" enctype=\"multipart/form-data\">" + "<input id = \"filename\" type=\"file\" name=\"userfile\" multiple=\"multiple\" />" + "<button type=\"submit\" id = \"submitButton\"> Upload </button></form>"); var form = $("#fileUploadForm"); form.submit(function (e) { //e.preventDefault()
  • jQuery Ajax - how to get response data in error
    I have a simple web application. I've created the server REST API so it will return a response with HTTP code and a JSON (or XML) object with more details: application code (specific to scenario, message that describe what happened etc.). So, for example if a client send a Register request and the password is too short, the response HTTP code will be 400 (Bad Request), and the response data will be: {appCode : 1020 , message : "Password is too short"}. In jQuery I'm using the "ajax" function to create a POST request. When the server returns something different from HTTP code 200 (OK), jQuery
  • 在Django中的AJAX发布后重定向(Redirecting after AJAX post in Django)
    问题 我使用Django的内置DeleteView,并为success_url属性分配了一个值。 现在在我的模板中,我通过JQuery的$ .post()方法触发此视图。 删除项目后,我不会重定向到success_url 。 经过一番搜索,我发现这似乎是AJAX post方法的问题,它忽略了重定向。 通过添加将window.location="#myRedirectionURL"为JQuery中$.post()的第三个参数的函数,我对其进行了修复。 但是,这种方式似乎不是Django。 从本质上讲,它是从AJAX而不是Django解决问题的。 更重要的是,它离开success_url在DeleteView无用的(但你还是得值赋给success_url ,或者Django将引发错误)。 那么通过AJAX进行发布时重定向的正确方法是正确的吗? 有什么更好的方法吗? 非常感谢。 回答1 Ajax不会重定向页面! 从重定向中获得的是POST响应中数据对象内部新页面中的html代码。 如果您知道在任何操作失败后将用户重定向到的位置,则只需执行以下操作: 在服务器上, 万一你有一个错误 response = {'status': 0, 'message': _("Your error")} 如果一切顺利 response = {'status': 1, 'message': _("Ok")}
  • jQuery .ajax()POST请求在RESTful WCF上抛出405(不允许使用方法)(jQuery .ajax() POST Request throws 405 (Method Not Allowed) on RESTful WCF)
    问题 我正在向RESTFUL WCF服务应用程序发送发布请求。 我能够通过Fiddler成功发送POST请求。 但是,当我通过jQuery Ajax方法执行此操作时,该函数会将以下内容返回到Chrome开发者控制台: OPTIONS http://www.example.com/testservice/service1.svc/GetData 405 (Method Not Allowed) jquery.min.js:6 但是随后是一秒钟的日志: Object {d: "You entered 10"} testpost.html:16 这告诉我的是jQuery正在发送一个OPTIONS请求,该请求失败,然后发送一个POST请求,该请求返回期望的数据。 我的jQuery代码: $.ajax() { type: "POST", //GET or POST or PUT or DELETE verb url: "http://www.example.com/testservice/service1.svc/GetData", // Location of the service data: '{"value":"10"}', //Data sent to server contentType:"application/json", dataType: "json", /
  • 如何在没有jQuery的情况下进行AJAX调用?(How to make an AJAX call without jQuery?)
    问题 如何在不使用jQuery的情况下使用JavaScript进行AJAX调用? 回答1 使用“香草” JavaScript: <script type="text/javascript"> function loadXMLDoc() { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == XMLHttpRequest.DONE) { // XMLHttpRequest.DONE == 4 if (xmlhttp.status == 200) { document.getElementById("myDiv").innerHTML = xmlhttp.responseText; } else if (xmlhttp.status == 400) { alert('There was an error 400'); } else { alert('something else other than 200 was returned'); } } }; xmlhttp.open("GET", "ajax_info.txt", true); xmlhttp.send(); } </script> 使用jQuery: $.ajax({
  • 如何在没有jQuery的情况下使用$ http发布urlencode表单数据?(How do I POST urlencoded form data with $http without jQuery?)
    问题 我是AngularJS的新手,一开始,我想只使用AngularJS开发一个新的应用程序。 我正在尝试使用Angular应用程序中的$http向服务器端进行AJAX调用。 为了发送参数,我尝试了以下操作: $http({ method: "post", url: URL, headers: {'Content-Type': 'application/x-www-form-urlencoded'}, data: $.param({username: $scope.userName, password: $scope.password}) }).success(function(result){ console.log(result); }); 这是可行的,但它也在$.param使用jQuery。 为了消除对jQuery的依赖,我尝试了: data: {username: $scope.userName, password: $scope.password} 但这似乎失败了。 然后我尝试了params : params: {username: $scope.userName, password: $scope.password} 但这似乎也失败了。 然后我尝试了JSON.stringify : data: JSON.stringify({username: $scope
  • 如何使用jQuery使用JSON响应调用ajax请求?(How to call ajax request with JSON response using jQuery?)
    问题 我无法从下面的代码行jQuery.support.cors = true打印成功。 。 包括这行jQuery.support.cors = true; 将给出警告信息。 那么,如何在不失去功能的情况下避免这种情况呢? 我的主要目标是调用返回JSON数据的rest Web服务,而我必须利用JSON数据。 请帮助我如何实现这一目标。 请提供工作样本 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>jQuery.getJSON demo</title> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> </head> <body> <script> jQuery.support.cors = true; $.ajax ({ url: 'http://json-cricket.appspot.com/score.json', datatype: "json", success: function (e) { // Success callback alert("sucess"); }}) </script> </body> </html> 回答1 您可能会错过添加type // GET或POST的类型
  • jquery 表单插件,无错误处理(jquery form plugin, no error handling)
    问题 Jquery.Form插件中似乎没有错误处理工具,这很令人沮丧。 尽管文档说我们可以使用 $.ajax 选项,但当服务器返回错误时,我仍然无法使用 'error' 选项,尤其是 500 和 400 系列。 是这个插件根本无法处理来自服务器的任何错误还是它是一个错误等? 有人可以告诉我如何使用此插件处理错误(400、500 等)吗? 我需要你的帮助......我想要的只是一个简单的错误处理......谢谢。 $("#uploadingImg").hide(); var options = {//Define ajax options type: "post", target: "#responsePanel", beforeSend: function(){ $("#uploadingImg").show(); }, complete: function(xhr, textStatus){ $("#uploadingImg").hide(); }, success: function(response, statusString, xhr, $form){ // I know what to do here since this option works fine }, error: function(response, status, err){ // This option
  • 如何将JQuery Autocomplete设置为POST而不是GET?(How do I set JQuery Autocomplete to POST instead of GET?)
    问题 有没有一种方法可以将Jquery的Autocomplete HTTP提交方法设置为POST而不是GET? 回答1 不幸的是,自动完成器没有可供您设置的选项。 但是,插件代码中只有一个地方可以调用$.ajax函数。 没有指定type选项,这意味着它将默认为GET请求。 您可以修改$.ajax调用(从最新版本的361行开始)以包括一个type选项,并将其值设置为“ post”: $.ajax({ //line 361 type: "post", ... 回答2 最好将它与source参数一起传递,而不是像这样全局设置: $("#input").autocomplete({ source: function (request, response) { $.post("/AjaxPostURL", request, response); } }); 回答3 您可以使用 $.ajaxSetup( { type: "post" } ); 在调用自动​​完成功能之前,它将覆盖页面上的ajax调用。 回答4 编辑源代码是一个非常糟糕的主意,因为在下次升级小部件时您将丢失所做的更改。 最好将全局类型设置为“ post”或传递请求/响应对象。 回答5 我改写了我们的JavaScript文件中的一个函数(在jQuery UI之后加载),以使其接受GET / POST作为另一种选择。 $.ui
  • 使用jQuery验证的远程功能(Using the remote function of jquery validation)
    问题 我试图弄清楚如何解决这个问题: $('#username').blur(function(){ $.post('register/isUsernameAvailable', {"username":$('#username').val()}, function(data){ if(data.username == "found"){ alert('username already in use'); } }, 'json'); }); 变成与此相似的东西: rules: { username: { minlength: 6, maxlength: 12, remote: { url: 'register/isUsernameAvailable', type: 'post', data: { 'username': $('#username').val() } } } 但是我很难完成它。 我想要的是代替警报来显示错误消息,但是我可以在实际的jquery验证消息中设置该消息。 http://docs.jquery.com/Plugins/Validation/Methods/remote#options 更新: 由于某种原因,它不将其作为POST进行,将其作为GET请求进行,并且不确定原因。 这是更新的代码: rules: { username: { minlength: 6
  • jQuery Ajax调用后如何管理重定向请求(How to manage a redirect request after a jQuery Ajax call)
    问题 我使用$.post()使用Ajax调用servlet,然后使用生成的HTML片段替换用户当前页面中的div元素。 但是,如果会话超时,服务器将发送重定向指令以将用户发送到登录页面。 在这种情况下,jQuery用登录页面的内容替换了div元素,迫使用户的眼睛确实看到了一个罕见的场景。 如何使用jQuery 1.2.6从Ajax调用管理重定向指令? 回答1 我阅读了这个问题,并实现了关于将响应HTTP状态代码设置为278的方法,以避免浏览器透明地处理重定向。 即使这样做有效,我还是有点不满意,因为这有点令人头疼。 在深入研究之后,我放弃了这种方法并使用了JSON。 在这种情况下,所有对AJAX请求的响应都具有状态码200,并且响应的主体包含在服务器上构造的JSON对象。 然后,客户端上的JavaScript可以使用JSON对象来决定它需要做什么。 我有一个与您类似的问题。 我执行一个AJAX请求,该请求有2种可能的响应:一种将浏览器重定向到新页面,另一种将新页面替换当前页面上的现有HTML表单。 执行此操作的jQuery代码如下所示: $.ajax({ type: "POST", url: reqUrl, data: reqBody, dataType: "json", success: function(data, textStatus) { if (data.redirect
  • jQuery Ajax,从mvc.net控制器返回成功/错误(Jquery Ajax, return success/error from mvc.net controller)
    问题 我想控制何时回复错误消息以及何时获得成功消息,但是我总是收到错误消息: 这是我正在尝试做的事情: $.ajax({ type: "POST", data: formData, url: "/Forms/GetJobData", dataType: 'json', contentType: false, processData: false, success: function (response) { alert("success!") }, error: function (response) { alert("error") // I'm always get this. } }); 控制器: [HttpPost] public ActionResult GetJobData(Jobs jobData) { var mimeType = jobData.File.ContentType; var isFileSupported = AllowedMimeTypes(mimeType); if (!isFileSupported){ // Error Response.StatusCode = (int)HttpStatusCode.BadRequest; return Content("The attached file is not supported"
  • jQuery动态URL缩短器(jQuery on the fly URL shortener)
    问题 我正在寻找一个动态URL缩短器,就像tweetdeck的工作方式一样。 我发现许多jQuery和通用javascript插件都带有一个url,并在按下按钮时通过诸如bit.ly之类的缩短服务运行它。 但是,我一直找不到能做到这一点的工具。 我的第一个问题是这是否已经存在? 其次,如果没有,那么识别需要在文本框内缩短的URL的最佳方法是什么? 我的想法: 在该文本区域的onKeyUp上,遍历寻找http的文本如果找到,则抓取整个URL(我如何确定结尾?可能是句点,逗号,空格等)。 确保该URL还不是bit.ly URL 验证URL(发出请求并确保http响应不是错误,bit.ly是否已执行此操作?) 如果有效,请将网址发送到bit.ly的API并获取响应在文本区域中,将长URL替换为短URL。 有什么想法吗? 回答1 这是一个如何使用Bitly API和jQuery获取缩短的URL的示例: function get_short_url(long_url, login, api_key, func) { $.getJSON( "http://api.bitly.com/v3/shorten?callback=?", { "format": "json", "apiKey": api_key, "login": login, "longUrl": long_url }
  • jQuery ajax错误功能(jQuery ajax error function)
    问题 我有一个ajax调用,将数据传递到页面,然后返回一个值。 我已经从页面中检索了成功的调用,但是我已经对其进行了编码,以至于它在asp中引发了错误。 如何从jquery中检索该错误? 例如: cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function (error) { **alert('error; ' + eval(error));** } 这是我不理解的错误位。 我需要在函数中输入什么参数,以便可以使用服务器中引发的错误消息。 回答1 Ajax error函数中必需的参数是jqXHR, exception ,您可以像下面这样使用它: $.ajax({ url: 'some_unknown_page.html', success: function (response) { $('#post').html(response.responseText); }, error: function (jqXHR, exception) { var
  • 如何使用jQuery Validate插件测试Recaptcha(how to test Recaptcha with jQuery Validate plugin)
    问题 我正在使用验证jquery插件和Recaptcha的联系表单,我想知道如何在提交表单之前,如果不发送错误消息,则在提交验证表单之前检查验证码中的代码是否正确,因为现在验证所有内容,但我插入了错误的代码无论如何都会被提交。 这是我提前获得的任何帮助 <script type="text/javascript"> var RecaptchaOptions = { lang : 'en', theme : 'custom', custom_theme_widget: 'recaptcha_widget' }; </script> <form id="contact" method="post" action="#"> <fieldset> <label for="name_contact">NAME</label> <input type="text" class="input-xlarge" id="name_contact" name="name_contact" value="" placeholder="" minlength="2"> <label for="email_contact">EMAIL</label> <input type="email" class="input-xlarge" id="email_contact" name="email_contact
  • 如何使用Django,Ajax,jQuery提交表单而不刷新页面?(How to submit form without refreshing page using Django, Ajax, jQuery?)
    问题 我是django的新手。 我需要简单的例子。 如何使用Django,Ajax,jQuery提交表单(发布)而不刷新页面? 这是我的表单,视图和模板: views.py from django.shortcuts import * from django.template import RequestContext from linki.forms import * def advert(request): if request.method == "POST": form = AdvertForm(request.POST) if(form.is_valid()): print(request.POST['title']) message = request.POST['title'] else: message = 'something wrong!' return render_to_response('contact/advert.html', {'message':message}, context_instance=RequestContext(request)) else: return render_to_response('contact/advert.html', {'form':AdvertForm()}, context_instance
  • 如何在 Protractor 中发出 HTTP GET+POST 请求(How to make HTTP GET+POST request in Protractor)
    问题 我在 Protractor 中发送 HTTP get 请求时遇到问题。 实际上,我需要在 UI 中执行一些操作后检查数据库中的数据。 如果我能够使用 JQuery 来完成它将会非常有帮助,但是我无法找到如何在 Protractor 中使用 JQuery 的方法。 需要帮忙 !! 实际上,我们确实尝试使用 Node.js 库,如下所示,但在其中遇到了问题。 var http = require('http'); var json_data; http.get('SiteUrl', function(response) { var bodyString = ''; response.setEncoding('utf8'); response.on("data", function(chunk) { bodyString += chunk; }); response.on('end', function() { json_data = bodyString; console.log("1---->" + json_data); }); }).on('error', function(e) { console.log("There is an error in GET request"); }); console.log("2---->" + json_data)
  • 如何将数据从JQuery AJAX请求发送到Node.js服务器(How to send data from JQuery AJAX request to Node.js server)
    问题 我想做的事: 只需使用jquery ajax请求将一些数据(例如json)发送到node.js http服务器。 由于某种原因,我无法在服务器上获取数据,因为它从不触发请求的“数据”事件。 客户代码: $.ajax({ url: server, dataType: "jsonp", data: '{"data": "TEST"}', jsonpCallback: 'callback', success: function (data) { var ret = jQuery.parseJSON(data); $('#lblResponse').html(ret.msg); }, error: function (xhr, status, error) { console.log('Error: ' + error.message); $('#lblResponse').html('Error connecting to the server.'); } }); 服务器代码: var http = require('http'); http.createServer(function (req, res) { console.log('Request received'); res.writeHead(200, { 'Content-Type': 'text/plain' })
  • 来自本地文件的jQuery ajax POST无法访问跨域(jQuery ajax POST from local file to access a cross domain not working)
    问题 如标题所述,我正在尝试使用jQuery AJAX调用从本地HTML访问Web URL, http://host:port/...或http://localhost:8080/... (POST)文件c:\home.html 。 我无法正常工作。 我做了Google,在这里也看到了几个问题,但无法正常工作。 我需要一些帮助。 到目前为止,这是我尝试过的。 dataType:jsonp crossDomain:正确在响应中设置标题: response.setHeader("Access-Control-Allow-Origin", "*"); 三种浏览器均无法正常运行-IE,FF或Chrome。 该请求永远不会到达服务器。 这是我看到的一些错误。 如果不使用jsonp,则不传输(IE)。 NS_BINDING_ABORTED /在FF中加载内容(NS_ERROR_DOCUMENT_NOT_CACHED)时出错 这是我的代码。 我将不胜感激任何帮助。 我正在使用jquery-1.8.2.min.js 。 var http_host = "http://localhost:8080"; function su (pc, p) { var suUrl = http_host + "/ps/api/v2/authorize.json"; $.ajax({ type: 'POST'