Fonction de rappel pour JSONP avec jQuery ajax

Je n'ai pas tout à fait compris comment travailler avec le callback pour le funcion ajax de JQuery.

J'ai le code suivant dans le JavaScript:

    try {
        $.ajax({
            url: 'http://url.of.my.server/submit?callback=?',
            cache: false,
            type: 'POST',
            data: $("#survey").serialize(),
            dataType: "jsonp",
            timeout: 200,
            crossDomain: true,
            jsonp: 'jsonp_callback',
            success: function (data, status) {
                mySurvey.closePopup();
            },
            error: function (xOptions, textStatus) {
                mySurvey.closePopup();
            }
        });
    } catch (err) {
        mySurvey.closePopup();
    }

et du côté serveur (AppEngine / Python) j'obtiens la valeur du paramètre callback et je réponds avec

    self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
    self.response.out.write(callback + '({"msg": "ok"});')

mais ensuite j'obtiens un "Error: jQuery152042227689944248825_1317400799214 is not a function" sur le navigateur.

Quelle est la bonne façon de gérer cela? Maintenant, je reçois les résultats que j'ai besoin, mais le fait que je sais c'est pas bien m'embête.

25
demandé sur Joe 2011-09-30 21:16:52
la source

3 ответов

C'est ce que je fais sur le mien

 $(document).ready(function () {
if ($('#userForm').valid()) {
                var formData = $("#userForm").serializeArray();
                $.ajax({
                    url: 'http://www.example.com/user/' + $('#Id').val() + '?callback=?',
                    type: "GET",
                    data: formData,
                    dataType: "jsonp",
                    jsonpCallback: "localJsonpCallback"
                });
    });

 function localJsonpCallback(json) {
        if (!json.Error) {
            $('#resultForm').submit();
        }
        else {
            $('#loading').hide();
            $('#userForm').show();
            alert(json.Message);
        }
    }
30
répondu atbebtg 2017-06-13 10:04:06
la source

supprimer cette ligne:

jsonp: 'jsonp_callback',

Ou remplacer cette ligne:

url: 'http://url.of.my.server/submit?callback=json_callback',

parce que vous demandez actuellement à jQuery de créer un nom de fonction de rappel aléatoire avec callback=? et ensuite dire à jQuery que vous voulez utiliser jsonp_callback à la place.

12
répondu Joe 2011-09-30 21:21:49
la source
$.ajax({
        url: 'http://url.of.my.server/submit',
        dataType: "jsonp",
        jsonp: 'callback',
        jsonpCallback: 'jsonp_callback'
    });

jsonp est le nom du paramètre querystring qui est défini pour être acceptable par le serveur alors que le jsonpCallback est le nom de la fonction javascript à exécuter sur le client.

Lorsque vous utilisez une telle url:

url: 'http://url.of.my.server/submit?callback=?'

le point d'interrogation ? à la fin, jQuery demande de générer une fonction aléatoire alors que le comportement prédéfini de la fonction autogénérée n'invoquera que le callback-la fonction sucess dans ce cas-passer les données json comme paramètre.

$.ajax({
        url: 'http://url.of.my.server/submit?callback=?',
        success: function (data, status) {
            mySurvey.closePopup();
        },
        error: function (xOptions, textStatus) {
            mySurvey.closePopup();
        }
    });



La même chose va ici si vous utilisez $.getJSON ? placeholder il va générer une fonction aléatoire alors que le comportement prédéfini de la fonction autogénérée va juste invoquer le callback:

$.getJSON('http://url.of.my.server/submit?callback=?',function(data){
//process data here
});
9
répondu Abdelfattah Ragab 2015-06-27 12:53:14
la source

Autres questions sur