Home  >  Article  >  Web Front-end  >  Analysis and solutions to the causes of failure of Jquery Ajax request file download operation

Analysis and solutions to the causes of failure of Jquery Ajax request file download operation

亚连
亚连Original
2018-05-24 14:55:292156browse

jQuery is indeed a very good lightweight JS framework, which can help us quickly develop JS applications, and to a certain extent, it has changed our habit of writing JavaScript code. This article focuses on introducing Jquery Ajax request file download. Analysis and solutions to the reasons for operation failure. Friends who are interested in the analysis of the reasons for ajax request failure will learn together.

jQuery is indeed a very good lightweight JS framework that can help us quickly develop JS Application, and to a certain extent, it has changed our habit of writing JavaScript code.

Stop talking nonsense and get straight to the point. Let’s analyze the reasons for the failure first

1. Reasons for the failure

That’s because of the response Generally, the requesting browser will process the response output by the server, such as generating png, file download, etc. However, the ajax request is only a "character type" request, that is, the requested content is stored in text type. The download of the file is in binary form. Although the returned response can be read, it is only read and cannot be executed. To put it bluntly, js cannot call the download processing mechanism and program of the browser.

2. Solution

1) You can use jquery to create a form and submit it to implement file download;

var form = $("<form>");
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action",rootPath + "T_academic_essay/DownloadZipFile.do");
var input1 = $("<input>");
input1.attr("type","hidden");
input1.attr("name","strZipPath");
input1.attr("value",strZipPath);
$("body").append(form);
form.append(input1);
form.submit();
form.remove();

2) You can directly use the a tag to achieve it File download;

286342f7f56e833fdd13c13ac999fabbClick to download5db79b134e9f6b82c0b36e0489ee08ed

3) Use hidden iframe or new form to solve the problem.

PS: Use of AJAX request $.ajax method

Use jQuery's $.ajax method to control AJAX requests in more detail. It exerts a fine-grained level of control over AJAX requests.

$.ajax method syntax

$.ajax(options)

Parameters

options

(Object) An instance of an object whose Properties define the parameters of this operation. See table below for details.

Return value

XHR instance

optionsDetailed range value

下面看个例子,尽可能多的用到options中的选项

客户端代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$().ready(function () {
  $(&#39;#selectNum&#39;).change(function () {
    var idValue = $(this).val();
    var show = $(&#39;#show&#39;);
    $.ajax({
      url: &#39;Server.aspx&#39;,
      type: &#39;POST&#39;,
      data: { id: idValue },
      //调小超时时间会引起异常
      timeout: 3000,
      //请求成功后触发
      success: function (data) { show.append(&#39;success invoke!&#39; + data+&#39;<br/>&#39;); },
      //请求失败遇到异常触发
      error: function (xhr, errorInfo, ex) { show.append(&#39;error invoke!errorInfo:&#39; + errorInfo+&#39;<br/>&#39;); },
      //完成请求后触发。即在success或error触发后触发
      complete: function (xhr, status) { show.append(&#39;complete invoke! status:&#39; + status+&#39;<br/>&#39;); },
      //发送请求前触发
      beforeSend: function (xhr) {
      //可以设置自定义标头
      xhr.setRequestHeader(&#39;Content-Type&#39;, &#39;application/xml;charset=utf-8&#39;);
      show.append(&#39;beforeSend invoke!&#39; +&#39;<br/>&#39;);
      },
      //是否使用异步发送
      async: true
    })
  });
})
</script>
</head>
<body>
<select id="selectNum">
  <option value="0">--Select--</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>
<p id="show"></p>
</body>
</html>

服务端主要代码:

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    if (Request["id"] != null && !string.IsNullOrEmpty(Request["id"].ToString()))
    {
      //启用该句会引发ajax超时异常
      // System.Threading.Thread.Sleep(3000);
      Response.Write(GetData(Request["id"].ToString()));
    }
  }
}
protected string GetData(string id)
{
  string str = string.Empty;
  switch (id)
  {
    case "1":
      str += "This is Number 1";
      break;
    case "2":
      str += "This is Number 2";
      break;
    case "3":
      str += "This is Number 3";
      break;
    default:
      str += "Warning Other Number!";
      break;
  }
  return str;
}

运行程序,结果如图:

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法

基于h5的history改善ajax列表请求体验

简单谈谈AJAX核心对象

Name

Type

Description

url

String

Requested url Address

type

String

The HTTP to be used method. Usually POST or GET. If omitted, defaults to GET

data

object

An object whose properties are passed as query parameters to requests. If it is a GET request, the data is passed as the query string; if it is a POST request, the data is passed as the request body. In both cases, it is the $.ajax() utility function that handles the encoding of the value

dataType

String

A keyword used to identify the expected The type of data that will be returned in the response. This value determines what subsequent processing (if any) is performed before the data is passed to the callback function. Valid values ​​are:

xml - the response text is parsed into an XML document, and the resulting XML DOM is passed to the callback function

html - the response text is passed to the callback function unprocessed . Any 3f1c4e4b6b16bbbd69b2ee476dc4f83a blocks within the returned HTML fragment will be evaluated

json - The response text is evaluated as a JSON string, and the resulting object is passed to the callback function

jsonp - Similar to json, except that remote scripting support is provided (assuming the remote server supports it)

script - The response text is passed to the callback function. Before any callback function is called, the response is processed as one or more JavaScript statements

text - The response text is assumed to be ordinary text. The server resource is responsible for setting the appropriate content-type response header. If this attribute is omitted, the response text is passed to the callback function without any processing or evaluation.

timeout

Value

Set the timeout value (milliseconds) of the Ajax request. If the request does not complete before the timeout value expires, the request is aborted and the error callback function (if defined) is called

global

Boolean

Enable or disable the triggering of global functions. These functions can be attached to elements and triggered at different times or states during Ajax calls. Global function triggering is enabled by default

#contentType

String

The content type to be specified on the request. Defaults to application/x-www-form-urlencoded (same as the default type used for form submission)

success

Function

This function is called if the response to the request indicates a success status code. The response body is returned to this function as the first parameter and is based on the specified dataType attribute. The second parameter is a string containing the status code - in this case always the success status code

##error

Function

This function is called if the response to the request returns an error status code. Three arguments are passed to this function: the XHR instance, the status message string (always the error status code in this case), and the exception object returned by the XHR instance (optional)

complete

Function

Called when the request is completed. Two arguments are passed: the XHR instance and the status message string (success status code or error status code). If a success or error callback function is also specified, this function is called after the success or error callback function is called

beforeSend

Function

is called before making the request. This function is passed an XHR instance and can be used to set custom headers or perform other pre-request operations

async

Boolean

#If false is specified, the request is submitted as a synchronous request. By default, requests are asynchronous

processData

Boolean

If set to false, it prevents the passed data from being processed into URL encoding format. By default, the data is processed into URL-encoded format (applicable to requests of type application/x-www-form-urlencoded)

##ifModified

Boolean

If set to true, only if the response content has not changed since the last request (according to the Last-Modified flag header) to allow the request to succeed. If omitted, no header checking is performed

The above is the detailed content of Analysis and solutions to the causes of failure of Jquery Ajax request file download operation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn