Sök…
Syntax
- var jqXHR = $ .ajax (url [, inställningar])
- var jqXHR = $ .ajax ([inställningar])
- jqXHR.done (funktion (data, textStatus, jqXHR) {});
- jqXHR.fail (funktion (jqXHR, textStatus, errorThrown) {});
- jqXHR.always (funktion (jqXHR) {});
parametrar
Parameter | detaljer |
---|---|
url | Anger webbadressen till vilken begäran ska skickas |
inställningar | ett objekt som innehåller många värden som påverkar begärandets beteende |
typ | HTTP-metoden som ska användas för begäran |
data | Uppgifter som ska skickas med begäran |
Framgång | En återuppringningsfunktion som ska ringas om begäran lyckas |
fel | En återuppringning för att hantera fel |
status | Ett objekt med numeriska HTTP-koder och funktioner som ska anropas när svaret har motsvarande kod |
data typ | Den typ av data som du förväntar dig tillbaka från servern |
innehållstyp | Innehållstyp för data som skickas till servern. Standard är "applikation / x-www-form-urlencoded; charset = UTF-8" |
sammanhang | Anger det sammanhang som ska användas i återuppringningar, vanligtvis this som avser det aktuella målet. |
Anmärkningar
AJAX står för A synkron J avascript en nd X ML. AJAX tillåter en webbsida att utföra en asynkron HTTP-begäran (AJAX) till servern och få ett svar utan att behöva ladda om hela sidan.
Hantera HTTP-svarskoder med $ .ajax ()
Förutom. .done
, .fail
och. .always
lovar återuppringningar, som utlöses baserat på om begäran var framgångsrik eller inte, finns det alternativet att utlösa en funktion när en specifik HTTP-statuskod returneras från servern. Detta kan göras med hjälp av parametern statusCode
.
$.ajax({
type: {POST or GET or PUT etc.},
url: {server.url},
data: {someData: true},
statusCode: {
404: function(responseObject, textStatus, jqXHR) {
// No content found (404)
// This code will be executed if the server returns a 404 response
},
503: function(responseObject, textStatus, errorThrown) {
// Service Unavailable (503)
// This code will be executed if the server returns a 503 response
}
}
})
.done(function(data){
alert(data);
})
.fail(function(jqXHR, textStatus){
alert('Something went wrong: ' + textStatus);
})
.always(function(jqXHR, textStatus) {
alert('Ajax request was finished')
});
Som officiell jQuery-dokumentation anger:
Om begäran är framgångsrik tar statuskodfunktionerna samma parametrar som framgångssuppringningen; om det resulterar i ett fel (inklusive 3xx redirect), de tar samma parametrar som
error
återuppringning.
Använda Ajax för att skicka ett formulär
Ibland kan du ha ett formulär och vill skicka in det med ajax.
Anta att du har denna enkla form -
<form id="ajax_form" action="form_action.php">
<label for="name">Name :</label>
<input name="name" id="name" type="text" />
<label for="name">Email :</label>
<input name="email" id="email" type="text" />
<input type="submit" value="Submit" />
</form>
Följande jQuery-kod kan användas (inom ett $(document).ready
samtal) -
$('#ajax_form').submit(function(event){
event.preventDefault();
var $form = $(this);
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: $form.serialize(),
success: function(data) {
// Do something with the response
},
error: function(error) {
// Do something with the error
}
});
});
Förklaring
-
var $form = $(this)
- formuläret, cachelagrat för återanvändning -
$('#ajax_form').submit(function(event){
- När formuläret med ID "ajax_form" skickas, kör denna funktion och skicka händelsen som en parameter. -
event.preventDefault();
- Förhindra att formuläret skickas normalt (Alternativt kan vi användareturn false
efterajax({});
uttalande, som kommer att ha samma effekt) -
url: $form.attr('action'),
- Få värdet på formens attribut "action" och använd det för egenskapen "url". -
data: $form.serialize(),
- Konverterar ingångarna i formuläret till en sträng som är lämplig för att skicka till servern. I detta fall kommer det att returnera något som "name=Bob&[email protected]"
Skickar JSON-data
jQuery gör att hantera jSON- svar smärtfritt, men lite mer arbete krävs när en given begäran vill att du skickar data i JSON-format:
$.ajax("/json-consuming-route", {
data: JSON.stringify({author: {name: "Bullwinkle J. Moose",
email: "[email protected]"} }),
method: "POST",
contentType: "application/json"
});
Observera att vi anger rätt contentType
för de data vi skickar; Detta är en god praxis i allmänhet och kan krävas av API du skickar till - men det har också sidoeffekt att instruera jQuery inte utföra standard omvandlingen av %20
till +
, som det skulle göra om contentType
var kvar vid standardvärdet för application/x-www-form-urlencoded
. Om du av någon anledning måste lämna contentType som standard, måste du ställa in processData
till falskt för att förhindra detta.
Samtalet till JSON.stringify
kan undvikas här, men med hjälp av det kan vi tillhandahålla informationen i form av ett JavaScript-objekt (och därmed undvika pinsamma JSON-syntaxfel som att inte ange egendomens namn).
Allt i ett exempel
Ajax Get:
Lösning 1:
$.get('url.html', function(data){
$('#update-box').html(data);
});
Lösning 2:
$.ajax({
type: 'GET',
url: 'url.php',
}).done(function(data){
$('#update-box').html(data);
}).fail(function(jqXHR, textStatus){
alert('Error occured: ' + textStatus);
});
Ajax Load: En annan ajax get-metod skapad för enkelhet
$('#update-box').load('url.html');
.load kan också anropas med ytterligare data. Datadelen kan tillhandahållas som sträng eller objekt.
$('#update-box').load('url.php', {data: "something"});
$('#update-box').load('url.php', "data=something");
Om .load anropas med en återuppringningsmetod kommer begäran till servern att vara ett inlägg
$('#update-box').load('url.php', {data: "something"}, function(resolve){
//do something
});
Ajax Post:
Lösning 1:
$.post('url.php',
{date1Name: data1Value, date2Name: data2Value}, //data to be posted
function(data){
$('#update-box').html(data);
}
);
Lösning 2:
$.ajax({
type: 'Post',
url: 'url.php',
data: {date1Name: data1Value, date2Name: data2Value} //data to be posted
}).done(function(data){
$('#update-box').html(data);
}).fail(function(jqXHR, textStatus){
alert('Error occured: ' + textStatus);
});
Ajax Post JSON:
var postData = {
Name: name,
Address: address,
Phone: phone
};
$.ajax({
type: "POST",
url: "url.php",
dataType: "json",
data: JSON.stringfy(postData),
success: function (data) {
//here variable data is in JSON format
}
});
Ajax Get JSON:
Lösning 1:
$.getJSON('url.php', function(data){
//here variable data is in JSON format
});
Lösning 2:
$.ajax({
type: "Get",
url: "url.php",
dataType: "json",
data: JSON.stringfy(postData),
success: function (data) {
//here variable data is in JSON format
},
error: function(jqXHR, textStatus){
alert('Error occured: ' + textStatus);
}
});
Ajax Avbryta ett samtal eller begära
var xhr = $.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
// döda begäran
xhr.abort()
Ajax filuppladdningar
1. Ett enkelt komplett exempel
Vi kan använda denna provkod för att ladda upp de filer som användaren har valt varje gång en ny filval görs.
<input type="file" id="file-input" multiple>
var files;
var fdata = new FormData();
$("#file-input").on("change", function (e) {
files = this.files;
$.each(files, function (i, file) {
fdata.append("file" + i, file);
});
fdata.append("FullName", "John Doe");
fdata.append("Gender", "Male");
fdata.append("Age", "24");
$.ajax({
url: "/Test/Url",
type: "post",
data: fdata, //add the FormData object to the data parameter
processData: false, //tell jquery not to process data
contentType: false, //tell jquery not to set content-type
success: function (response, status, jqxhr) {
//handle success
},
error: function (jqxhr, status, errorMessage) {
//handle error
}
});
});
Låt oss nu dela upp detta och inspektera det delvis.
2. Arbeta med filingångar
Detta MDN-dokument (med hjälp av filer från webbapplikationer) är en bra läsning om olika metoder för att hantera filingångar. Vissa av dessa metoder kommer också att användas i det här exemplet.
Innan vi börjar ladda upp filer måste vi först ge användaren ett sätt att välja de filer de vill ladda upp. För detta ändamål kommer vi att använda en file input
. Den multiple
egenskapen gör det möjligt att välja mer än en fil, du kan ta bort den om du vill att användaren ska välja en fil åt gången.
<input type="file" id="file-input" multiple>
Vi kommer att använda ingångs change event
att fånga filerna.
var files;
$("#file-input").on("change", function(e){
files = this.files;
});
Inuti hanterarfunktionen får vi tillgång till filerna genom filegenskapen för vår ingång. Detta ger oss en FileList , som är en matrisliknande objekt.
3. Skapa och fylla FormData
För att ladda upp filer med Ajax kommer vi att använda FormData .
var fdata = new FormData();
FileList som vi har fått i föregående steg är ett array-liknande objekt och kan itereras med olika metoder inklusive för loop , för ... av loop och jQuery.each . Vi kommer att hålla fast vid jQuery i det här exemplet.
$.each(files, function(i, file) {
//...
});
Vi kommer att använda tilläggsmetoden för FormData för att lägga till filerna i vårt formdataobjekt.
$.each(files, function(i, file) {
fdata.append("file" + i, file);
});
Vi kan också lägga till andra data som vi vill skicka på samma sätt. Låt oss säga att vi vill skicka lite personlig information som vi har fått från användaren tillsammans med filerna. Vi kan lägga till denna information i vårt formdataobjekt.
fdata.append("FullName", "John Doe");
fdata.append("Gender", "Male");
fdata.append("Age", "24");
//...
4. Skicka filerna med Ajax
$.ajax({
url: "/Test/Url",
type: "post",
data: fdata, //add the FormData object to the data parameter
processData: false, //tell jquery not to process data
contentType: false, //tell jquery not to set content-type
success: function (response, status, jqxhr) {
//handle success
},
error: function (jqxhr, status, errorMessage) {
//handle error
}
});
Vi ställer in processData
och contentType
egenskaper till false
. Detta görs så att filerna kan skickas till servern och behandlas av servern korrekt.