$ .ajax si condition

J'ai échoué à écrire une condition à l'intérieur d'ajax en utilisant la syntaxe suivante.

var num = 1; $.ajax({ type: "POST", //condition starts if (num === 1){ url: url1, data: data1, }else{ url: url2, data: data2, } //condition finishes success: success, dataType: dataType }); 

Mais cela fonctionne de cette façon.

  var num = 1; if(num === 1){ $.ajax({ type: "POST", url: url1, data: data1, success: success, dataType: dataType }); }else{ $.ajax({ type: "POST", url: url2, data: data2, success: success, dataType: dataType }); } 

La 2ème méthode n'est pas tout à fait idéale pour répéter mon code. Est-ce mon premier script dans une mauvaise syntaxe? Quelqu'un pourrait-il souligner? Merci

Est-ce mon premier script dans une mauvaise syntaxe?

Oui absolument. Vous étiez simplement en train d'insérer des pièces de déclaration si-else dans le milieu d'un objet littéral. Vous devriez utiliser quelque chose comme ceci:

 var params = { type: "POST", success: success, dataType: dataType }; if (num == 1) { params.url = url1; params.data = data1; } else { params.url = url2; params.data = data2; } $.ajax(params); 

Ou si vous souhaitez les intégrer, vous pouvez utiliser l' opérateur ternaire :

 $.ajax({ type: "POST", url: (num == 1) ? url1 : url2, data: (num == 1) ? data1 : data2, success: success, dataType: dataType }); 

(Si vous ne voulez pas répéter la condition, stockez son résultat booléen dans une variable)

Vous pourriez le faire comme ceci:

 var num = 1, url, data; if (num === 1) { url = url1; data = data1; } else { url = url2; data = data2; } $.ajax({ type: "POST", url: url, data: data, success: success, dataType: dataType }); 

Les choses dans les { orthèses } sont un objet littéral. Vous pouvez le déclarer et le modifier avant d'appeler $.ajax .

 var options = { type: "POST", url: url2, data: data2, success: success, dataType: dataType }; if (num === 1) { options.url = url; options.data = data; } $.ajax(options); 

$.ajax prend un objet JavaScript régulier, afin que vous puissiez le remplir en plusieurs parties:

 request = {type: "POST", success: success, dataType: dataType}; if(num == 1) { request.url = url1; request.data = data1; } else { request.url = url2; request.data = data2; } $.ajax(request); 

Placez la condition avant les instructions ajax et affectez des variables communes là-bas.

Essayez cette façon si url et les données sont très simples.

  var num = 1; $.ajax({ type: "POST", url : (num==1? url1 : url2), data: (num==1? data1 : data2), success: success, dataType: dataType }); 

Essaye ça:

 var num = 1; $.ajax({ type: "POST", url: (num === 1 ? url1 : url2) data: (num === 1 ? data1 : data2) success: success, dataType: dataType }); 

Mais comme d'autres l'ont mentionné, il serait préférable d'attribuer des variables en dehors de l'appel ajax.