Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Catturare il return in jQuery Ajax

    ciao!

    ho un problema con il recuperare i valori da una chiamata ajax, fatta da un'altra chiamata ajax.

    mi spiego, questa è la chiamata ajax principale:
    codice:
    function getPostsNews(categoria) {
        $.ajax({
            url: '',
            type: 'GET',
            contentType: "application/json; charset=utf-8",
            dataType: "json"
    }).done(function (res) {
    res.forEach(function (el) {
                var img = '';
                if (typeof el["post-meta-fields"]["_thumbnail_id"] !== "undefined") {
                    img = getMediaId(el["post-meta-fields"]["_thumbnail_id"], false);
                    console.log(img);
                } else {
                    img = 'images/white.jpg';
                }
            });
    
    }).fail(function (err) {
    });
    }
    li richiamo la funzione getMediaId che deve effettuare un'altra chiamata ajax e restituire un valore.
    io gli passo async false, in quanto non deve essere asincrona.
    faccio così:
    codice:
    function getMediaId(id, async = true) {
        $.ajax({
            url: '',
            type: 'GET',
            aysnc: async,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (res) {
                return res.source_url;
            },
            error: function () {
                return 'images/white.jpg';
            }
        });
    }
    il valore di source_url è corretto.
    però alla prima chiamata arriva sempre undefined.
    per quale motivo???

  2. #2
    ho provato anche così:
    codice:
    function getMediaId(id, async = true) {
        let out;
        $.ajax({
            url: baseUrl + 'media/' + id,
            type: 'GET',
            aysnc: async,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false
    }).done(function (res) {
            out = res.source_url;
            console.log("1:" + out);
        }).fail(function (err) {
            out = 'images/white.jpg';
        });
        console.log("2:" + out);
        return out;
    }
    quello che non capisco è che mi esce prima il console contrassegnato come 2, con valore undefined.
    e poi quello con 1, col valore corretto.
    in teoria, forzando l'async, questo non dovrebbe succedere!

  3. #3
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,195
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ho provato anche così:
    codice:
    function getMediaId(id, async = true) {
        let out;
        $.ajax({
            url: baseUrl + 'media/' + id,
            type: 'GET',
            aysnc: async,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false
    }).done(function (res) {
            out = res.source_url;
            console.log("1:" + out);
        }).fail(function (err) {
            out = 'images/white.jpg';
        });
        console.log("2:" + out);
        return out;
    }
    quello che non capisco è che mi esce prima il console contrassegnato come 2, con valore undefined.
    e poi quello con 1, col valore corretto.
    in teoria, forzando l'async, questo non dovrebbe succedere!

    per rendere la chiamata non asincrona devi usare :

    codice:
    async:false
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  4. #4
    eh si, l'ho messo come parametro.
    gli passo false.

    cmq stamattina ho riaperto la pagina per lavorarci ed ha funzionato.
    forse era solo un problema di caching.

  5. #5
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,195
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.