2011-09-30 16 views
25

Nie bardzo rozumiem, jak pracować z callbackiem dla funkcji ajaxowej JQuery.Funkcja oddzwaniania dla JSONP z JQuery ajax

Mam następujący kod w 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(); 
    } 

A po stronie serwera (AppEngine/Python) uzyskać wartość parametru wywołania zwrotnego i reagowania z

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

ale potem Dostaję "Error: jQuery152042227689944248825_1317400799214 is not a function" w przeglądarce.

Jaki jest właściwy sposób postępowania z tym? Teraz dostaję wyniki, których potrzebuję, ale fakt, że wiem, że to nie w porządku, przeszkadza mi.

+0

Chyba POST parametr jest ignorowany. Jak wiem, JSONP może tworzyć tylko żądania GET, ponieważ to, co faktycznie robi, to tworzenie tagu

12

usunąć tę linię:

jsonp: 'jsonp_callback', 

Albo zastąpić ten wiersz:

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

ponieważ obecnie prosicie jQuery do tworzenia losowych oddzwonienia nazwę funkcji z callback=? a następnie mówi jQuery, które chcesz zamiast tego użyj jsonp_callback.

8
$.ajax({ 
     url: 'http://url.of.my.server/submit', 
     dataType: "jsonp", 
     jsonp: 'callback', 
     jsonpCallback: 'jsonp_callback' 
    }); 

jsonp jest nazwa parametru ciągu kwerendy, która jest zdefiniowana jako akceptowalne przez serwer podczas jsonpCallback jest javascript nazwa funkcji, aby być wykonywane u klienta.
Podczas korzystania z takiego URL:

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

znak zapytania? na końcu instruuje jQuery, aby wygenerowała funkcję losową, podczas gdy predefiniowane zachowanie autogenerowanej funkcji wywoła tylko wywołanie zwrotne - w tym przypadku funkcję sukcesu - przekazując dane json jako parametr.

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


To samo tutaj, jeśli używasz $ .getJSON z? zastępczy będzie generować losowe funkcji natomiast predfined zachowanie funkcji automatycznie wygenerowany po prostu wywołać callback:

$.getJSON('http://url.of.my.server/submit?callback=?',function(data){ 
//process data here 
}); 
+0

"autogenerowana funkcja wywoła tylko wywołanie zwrotne", dziękuję! – Eddy