2013-02-07 9 views
9

Nie udało mi się zapisać warunku wewnątrz ajaxa, używając następującej składni.

 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 
     }); 

ale działa w ten sposób.

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 
}); 
} 

Druga metoda nie jest całkiem idealna jako powtarzanie mojego kodu. to mój pierwszy skrypt w niewłaściwej składni? Czy ktoś mógłby wskazać? dzięki

Odpowiedz

18

jest mój pierwszy skrypt w niewłaściwej składni?

Tak, zdecydowanie. Właśnie wstawiłeś części if-else-statement w środku literału obiektu. Należy używać coś takiego:

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

Lub jeśli chcesz je inline, możesz użyć tych ternary operator:

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

(Jeśli nie chcesz, aby powtórzyć warunek, przechowywać swoją wartość logiczną wynik w zmiennej)

+0

dziękuję za wyjaśnienie – olo

0

Umieść warunek przed instrukcjami ajax i przypisz tam wspólne zmienne.

4

Można to zrobić tak:

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

Spróbuj w ten sposób, jeśli adres URL i dane są bardzo proste.

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

$.ajax bierze regularny obiekt JavaScript, aby można było wypełnić go w odcinkowo:

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

łatwiej zrozumieć, jak dobrze, dziękuję – olo

0

Spróbuj tego:

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

Ale jak wspominają inni, że najlepiej byłoby po prostu przypisać zmienne poza wywołaniem ajax.

4

Rzeczy w nawiasach { jest literałem obiektu. Możesz go zadeklarować i zmodyfikować, zanim zadzwonisz pod numer $.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

Dziękuję. dowiedziałeś się od ciebie :-) – olo