Tworzę prosty post JSON na serwer i pobieram tylko na wartości logiczne. Problem polega na tym, że to wywołanie json znajduje się wewnątrz innej funkcji, która również musi zwrócić tę wartość logiczną.

Mam tutaj dwa rozwiązania

  1. Jakoś zwróć dane z funkcji powrotu JSON, a następnie zwróć je ponownie z funkcji opakowującej (kod, który mam tutaj nie działa, nie mogę wymyślić, jak zwrócić dane z "function(){} wewnątrz $.postJSON:

        function testZipCode(zipcode, state) {
        var s;
        $.postJSON("/Cart/ZipTest",
            {
                state: state,
                zipCode: zipcode
            }, function (data) {
                if (!data.ok) {
                    s = false;
                }
                s = true;
            });
            return s;
    }
    

    }

  2. Poczekaj, aż POST się zakończy, a następnie zwróć wynik w ten sposób: (błąd, który tutaj pojawia się, polega na tym, że wywołam return przed zakończeniem testu POST, więc responseText ma wartość null. Czy ktoś może pomóc?

     var result = $.postJSON("/Cart/ZipTest",
     {
                state: state,
                zipCode: zipcode
            }, function (data) {
                if (!data.ok) {
                    //do something
                }
            });
            return $.parseJSON(result.responseText).ok;
    
0
bobek 29 sierpień 2012, 22:09

2 odpowiedzi

Najlepsza odpowiedź

Zwróć wywołanie ajax jako odroczony obiekt i zrób coś w funkcji zwrotnej:

function someOtherFunction() {
    testZipCode('90102', 'FL').done(function(data) {
        if (!data.ok) something = false;
    });

}

function testZipCode(zipcode, state) {
    return $.getJSON("/Cart/ZipTest", {state: state, zipCode: zipcode} );
}​
2
adeneo 29 sierpień 2012, 22:13

Zrób coś takiego ...

 {
            state: state,
            zipCode: zipcode
        }, function (data, count) {
            if (!data.ok) {
               getTheData(data); //do something
            }
        });


           return $.parseJSON(result.responseText).ok;

         function getTheData(data)
{
//do things with data here
}
0
Ashirvad 29 sierpień 2012, 22:13