Question

Je suis tellement frustré ...

J'ai une fonction jQuery pour saisir des données de liste et lorsque je connecte "Data", je vois la complète {d} avec un {résultats} Tenir tous les éléments de la liste.Mais quand je l'exécute à travers un $. Chercher une fonction pour obtenir une chaîne, je peux retourner, lorsque je me connecte RSP, le débogueur dit "une chaîne vide".

Voici ma fonction:

function get_news(){
    var rsp = '';
    $.ajax({
        url: "http://edrdbdev/_api/web/lists/GetByTitle('Latest News')/items",
        type: "GET",
        headers: { "accept" : "application/json;odata=verbose" },
        success: function(data){
            console.log(data);
            $.each(data.d.results, function(index, item){
                rsp +=  "<p>" + item.Title + "</p>"
            });
        },
        error: function(error){
            rsp = JSON.stringify(error);
        }
    });

    console.log(rsp);
    return rsp;
} // end get_props function

Je vais être fou et j'apprécierais grandement tout conseil ou correction.Merci d'avance.

Était-ce utile?

La solution

$.ajax perform an asynchronous HTTP (Ajax) request. That means sending the request (or rather receiving the response) is taken out of the normal execution flow.

In your example, return rsp is executed before the function you passed as success callback was even called.

Solutions

There are basically two ways how to solve this:

  • Make the AJAX call synchronous.
  • Restructure your code to work properly with callbacks.

Please refer How to return the response from an AJAX call? for a more details

Below is demonstrated the modified version with callback usage:

function get_news(result){
    var rsp = '';
    $.ajax({
        url: "http://edrdbdev/_api/web/lists/GetByTitle('Latest News')/items",
        type: "GET",
        headers: { "accept" : "application/json;odata=verbose" },
        success: function(data){
            console.log(data);
            $.each(data.d.results, function(index, item){
                rsp +=  "<p>" + item.Title + "</p>"
            });
            result(rsp);    
        },
        error: function(error){
            result(JSON.stringify(error));
        }
    });    
} 



//Usage
get_news(function(content){
    console.log(content);
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top