2013-02-07 3 views
9

Je n'ai pas réussi à é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 cette méthode fonctionne.

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 mon premier script dans une mauvaise syntaxe? Quelqu'un pourrait-il signaler? merci

Répondre

18

est mon premier script dans une syntaxe erronée?

Oui, absolument. Vous étiez en train d'insérer des parties if-else-statement au milieu d'un littéral d'objet. Vous devez 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 voulez les inline, vous pouvez utiliser le ternary operator:

$.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, stocker son booléen résultat dans une variable)

+0

Merci beaucoup pour votre explication – olo

0

Placez la condition avant les instructions ajax et affectez-y des variables communes.

4

Vous pouvez 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 
}); 
0

Essayez de cette façon si l'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 
    }); 
3

$.ajax prend un objet régulier JavaScript, vous pouvez le remplir par morceaux:

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); 
+0

plus facile à comprendre aussi bien, merci beaucoup – olo

0

Essayez ceci:

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 de simplement affecter des variables en dehors de l'appel ajax.

4

Le contenu des { accolades } est un littéral d'objet. Vous pouvez le déclarer et le modifier avant d'appeler le $.ajax.

var options = 
{ 
    type: "POST", 
    url: url2, 
    data: data2, 
    success: success, 
    dataType: dataType 
}; 

if (num === 1) { options.url = url; options.data = data; } 

$.ajax(options); 
+0

Merci. appris de vous :-) – olo