Czy ajax może zwracać wartość??

0

Chciałbym użyć ajax jako funkcji zwracającej.
Coś takiego:

var ajaxValue = ajaxReturn('file.txt');
console.log(ajaxValue);

function ajaxReturn(filePath) {
    $.ajax({
        type: "POST",
        url: "../php_scripts/readFile.php",
        data: {klucz_ajax: filePath},
        success: function (data) {

             return  JSON.parse(data); //  coś w tym stylu

        },
    });
//  return ???????
}

Czy jest to możliwe i jak powinienem się do tego zabrać?

0

ajax wykonuje się asynchronicznie więc nie.

1

Tak, ajax można wywoływać synchronicznie. W jQuery to będzie np.

function getSyncData() {
    return $.ajax({
        type: "GET",
        url: http://<adres>,
        async: false
    }).responseText;
}
2
function fetchCośTam() {
  return $.ajax({});
}

fetchCośTam().then(function(data) {
  console.log(data);
});

Ajax zwraca promise.
@TomDom tak, jak wyżej nie rób.

0

Już napisałem coś takiego i działa !!!

function innafunkcja() {
    var trescPliku  = JSON.parse(readTxtFile('upload/t.txt'));
    console.log("trescPliku:  " + trescPliku);
}
function readTxtFile(filePath) {
    return $.ajax({
        type: "POST",
        url: "../php_scripts/readFile.php",
        async: false,
        data: {klucz_ajax: filePath},
    }).responseText;
}

zaraz jeszcze mala przerobka...

0

Finalnie bedzie coś takiego:

function innafunkcja() {
    var trescPliku  = readTxtFile('upload/t.txt');
    console.log("trescPliku:  " + trescPliku);
}
function readTxtFile(filePath) {
    var ret = $.ajax({
        type: "POST",
        url: "../php_scripts/readFile.php",
        async: false,
        data: {klucz_ajax: filePath},
    }).responseText;
    //  tu dojda
    // jakies instrukcje i przerobki ( musze usunac znaczniki nowej linii...
    return JSON.parse(ret);
}

Ajax zwraca promise.
@TomDom tak, jak wyżej nie rób.

Hmm nie wiem co mam zrobić
zależy mi na funkcji do będzie mi zawracać tablicę z liniami pliku tekstowego i takie rozwązanie działa. Gdy próbowałem użyć działań asychronicznych to mogłem jedynie wpisać wynik do zmiennej globalnej w której te dane pojawiały się z pewnym opoznieniem.
Rozwiązanie takie jak powyżej działa odpowiednio do moich potrzeb;

1

Async false powoduje, że zamulasz przeglądarkę do momentu aż nie dostaniesz odpowiedzi. Jak to potrwa 30 sec, to nikt na Twojej stronie nic nie zrobi.. Zlituj sie. To żądanie (AJAX) nazywa się asynchroniczne z jakiegoś powodu.

Z resztą sam się możesz przekonać. Dodaj do swojego skryptu PHP sleep(60) i sprawdź co się stanie.

http://jsdn.pl/asynchronicznosc-javascript-dla-poczatkujacych/

0

Rozumiem co macie na myśli i macie racje. Tylko, że ja chce z tego pliku robić raz na jakiś czas update informacji w bazie danych i będzie to trwało kilka sekund raz na kilka tygodni poza tym system który piszę bedzie wykorzystywany do wewnętrznych zastosowań.

Dobrze zrozumiałem żeby nie wykorzystywać takiego rozwiązania żeby nie przycinać strony asynchroniczne działania to coś jak wielowątkowość w innych językach.

0

Jaki widzisz problem z normalnym callbackiem? Każdy tego używa i jakoś nikt nie narzeka, a jest to jedyne właściwe rozwiązanie.

0
mr_jaro napisał(a):

ajax wykonuje się asynchronicznie więc nie.

Jedyny problem z callbackiem jaki mam to to że jeszcze nie wiem co to jest. Poprosiłem o pomoc na forum i otrzymalem info ze można wyłaczyć działania asynchroniczne i funkcja zaczeła zwracać oczekiwany wynik :)
Gdyby ktoś mi odpowiedział, że do tego powinno się używać callbacku to by mnie naprowadziło znacznie lepiej niż suche info że się nie da....

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0