search
HomeWeb Front-endJS TutorialUse jQuery and JSONP to easily solve cross-domain access problems_jquery

Time flies so fast, and when I am pulled back to the js battlefield, the scar of cross-domain issues starts to hurt again.

Fortunately, with the help of jquery, the cross-domain problem seems not so difficult. This time I also took this opportunity to get to the bottom of the cross-domain problem. Based on the actual development project, I checked the relevant information and finally solved the cross-domain problem. Question..It is necessary to write down the memo.

Cross-domain security restrictions all refer to the browser side. There are no cross-domain security restrictions on the server side, so the "cross-domain access" work is completed through the local server side through a method similar to httpclient, and then in It is also possible to use AJAX on the browser side to obtain the URL corresponding to the "cross-domain access" on the local server side to indirectly complete cross-domain access. However, it is obvious that the amount of development is relatively large, but the restrictions are also minimal. Many widget open platform servers (such as Sohu blog open platform) is actually just that. It is not within the scope of this discussion.

What we want to discuss is the true cross-domain access on the browser side. It is recommended that jQuery $.ajax() currently supports cross-domain access in the get method, which is actually done using jsonp.

Real case:

Copy code The code is as follows:

var qsData = {'searchWord':$("#searchWord").attr("value"),'currentUserId':$("#currentUserId").attr("value"),'conditionBean.pageSize':$( "#pageSize").attr("value")};

$.ajax({
async:false,
url: http://cross-domain dns/document!searchJSONResult.action,
type: "GET",
dataType: ' jsonp',
jsonp: 'jsoncallback',
data: qsData,
timeout: 5000,
beforeSend: function(){
//jsonp method this method is not triggered. Possible reasons If the dataType is specified as jsonp, it is no longer an ajax event
},
success: function (json) {//The callback function predefined by jquery on the client side successfully obtains the json data on the cross-domain server Afterwards, this callback function will be executed dynamically
if(json.actionErrors.length!=0){
alert(json.actionErrors);
}
genDynamicContent(qsData,type,json);
},
complete: function(XMLHttpRequest, textStatus){
$.unblockUI({ fadeOut: 10 });
},
error: function(xhr){
// This method is not triggered in jsonp mode. The reason may be that if dataType is specified as jsonp, it is no longer an ajax event
//Request error handling
alert("Request error (please check the correlation network status.)" ; Copy the code


The code is as follows:


$.getJSON(" http://cross-domain dns/document!searchJSONResult.action?name1=" value1 "&jsoncallback= ?", function(json){
if(json.property name==value){
// Execute code
}
});
This method is actually an advanced encapsulation of the $.ajax({..}) api in the above example. Some of the underlying parameters of the $.ajax api are encapsulated and invisible.
In this way, jquery will Assemble the following url get request
http://cross-domain dns/document!searchJSONResult.action?&jsoncallback=jsonp1236827957501&_=1236828192549&searchWord=use case¤tUserId=5351&conditionBean.pageSize=15

On the response side (http://cross-domain dns/document!searchJSONResult.action),
get the js function name to be called back later on the jquery side through jsoncallback = request.getParameter("jsoncallback")
Then the content of the response is a Script Tags: "jsonp1236827957501("json array generated according to the request parameters")";
jquery will dynamically load and call this js tag through the callback method: jsonp1236827957501(json array);
This achieves the purpose of cross-domain data exchange.

The most basic principle of jsonp is: dynamically add a <script> tag, and the src attribute of the script tag has no cross-domain restrictions. In this way, this cross-domain method has nothing to do with the ajax XmlHttpRequest protocol. <BR> In this way, the "jQuery AJAX cross-domain issue" has become a false proposition, and the jquery $.ajax method name is misleading. </script>

If set to dataType: 'jsonp', this $.ajax method has nothing to do with ajax XmlHttpRequest, and will be replaced by the JSONP protocol.

JSONP is an unofficial protocol that allows Script tags to be integrated on the server side and returned to the client, and cross-domain access to JSONP, that is, JSON with Padding, can be achieved through javascript callback. Due to the restrictions of the same-origin policy, XmlHttpRequest is only allowed to request resources from the current source (domain name, protocol, port). If we want to make a cross-domain request, we can make a cross-domain request by using the script tag of html and return the script code to be executed in the response, where the javascript object can be passed directly using JSON. This cross-domain communication method is called JSONP.

jsonCallback function jsonp1236827957501(....): It is registered by the browser client. After obtaining the json data on the cross-domain server, the callback function

Jsonp principle:

First register a callback (such as: 'jsoncallback') on the client, and then pass the callback name (such as: jsonp1236827957501) to the server. Note: After the server obtains the callback value, it must use jsonp1236827957501(...) to include the json content to be output. At this time, the json data generated by the server can be correctly received by the client.

Then use javascript syntax to generate a function. The function name is the value of the passed parameter 'jsoncallback' jsonp1236827957501.

Finally, the json data is placed directly into the function as a parameter, thus generating a js syntax document and returning it to the client.

The client browser parses the script tag and executes the returned javascript document. At this time, the javascript document data is passed as a parameter,
to the callback function predefined by the client (such as jquery $.ajax in the above example) () method encapsulated success: function (json)). (Dynamic execution of callback function)

It can be said that the jsonp method is consistent in principle with (qq space uses this method extensively To achieve cross-domain data exchange). JSONP is a script injection (Script Injection) behavior, so it also has certain security risks.

Sample code of principle:

Copy code The code is as follows:

//Client JAVASCRIPT code
var script=document.createElement("script");
script.src="http://www.pl4cj.com:8888/5/6/action.php ?param=123&callback=" fnName;
document.getElementsByTagName("head")[0].appendChild(script)

//The PHP code on the server side must have a callback for callback, here Adding parentheses allows it to be parsed in the form of statement blocks
echo $_GET["callback"]."(" .json_encode($_GET).");";
?

Note that jquey does not support cross-domain post.

Why?
Although using post to dynamically generate iframe can achieve the purpose of post cross-domain, doing so is a relatively extreme method and is not recommended.
It can also be said The cross-domain method of get is legal, but the post method is considered illegal from a security perspective. It is best not to take the wrong approach as a last resort..

The demand for cross-domain access on the client side seems to have attracted the attention of w3c. According to the information, the HTML5 WebSocket standard supports cross-domain data exchange and should also be an optional cross-domain data exchange solution in the future

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
jquery实现多少秒后隐藏图片jquery实现多少秒后隐藏图片Apr 20, 2022 pm 05:33 PM

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

axios与jquery的区别是什么axios与jquery的区别是什么Apr 20, 2022 pm 06:18 PM

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

jquery怎么在body中增加元素jquery怎么在body中增加元素Apr 22, 2022 am 11:13 AM

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

jquery怎么修改min-height样式jquery怎么修改min-height样式Apr 20, 2022 pm 12:19 PM

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

jquery怎么删除div内所有子元素jquery怎么删除div内所有子元素Apr 21, 2022 pm 07:08 PM

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

jquery中apply()方法怎么用jquery中apply()方法怎么用Apr 24, 2022 pm 05:35 PM

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

jquery怎么去掉只读属性jquery怎么去掉只读属性Apr 20, 2022 pm 07:55 PM

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

jquery on()有几个参数jquery on()有几个参数Apr 21, 2022 am 11:29 AM

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),