![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 8 Dołączył: 10.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chciałbym sobie zrobić takie API że jak naprzykład na stronie http://klient.pl/ zrobię:
To wtedy na serwerze położonym na http://serwer.pl doda mi tą wiadomość do bazy danych (IMG:style_emoticons/default/smile.gif) Tworzenie klas, dodawanie itp. to nie problem ? Tylko jak przekazać tą wiadomość ? poprzez GET ? Że wykona mi się np. http://serwer.pl/addMessage/klient.pl/TreśćWiadomości ? Jeżeli tak to jak to wykonać tak aby móc zwrócić TRUE/FALSE ? file_get_contents(adres) (Tutaj mogę sobie przy okazji zwrócić właśnie wiadomość zserializowaną tablicą a u klienta ją unserializować) ? Czy takie rzeczy robi się inną metodyką ? Ten post edytował Damiankossek 14.02.2011, 01:50:39 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
xml-rpc
soap |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 8 Dołączył: 10.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie bawię się tym NuSoapem ale mam problem bo za każdym razem do klienta zwraca mi:
Response not of type text/xml: text/html; charset=utf-8 Wydaje mi sie że wszystko mam dobrze, zobaczcie sami: KLIENT:
SERVER:
Co może być nie tak ? Ten post edytował Damiankossek 14.02.2011, 13:01:44 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
fuu ... xml (IMG:style_emoticons/default/biggrin.gif)
Nie lepiej przekazywać postem jsonowaną tablicę ze stringiem "command" (czyli np. "addNews") i tablica w drugim kluczu "params" (z danymi)? Proste, szybkie i dobrze się sprawdza (IMG:style_emoticons/default/wink.gif) Dostępne z ręki w JS, PHP i większości języków. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 8 Dołączył: 10.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
A jak przekazać to POSTEM na inny serwer ?(IMG:style_emoticons/default/snitch.gif)
tzn. form z actionem zrobić umiem (IMG:style_emoticons/default/smile.gif) W zasadzie zależy mi na tym żeby to było bez zbędnego przeładowywania strony. Bo to ma leżeć w controllerze i poprostu co refresh się wykonywać, user na to wpływu nie ma Ten post edytował Damiankossek 14.02.2011, 13:39:23 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Javascriptem może jeśli to kliencka app w przeglądarce? W php to najprościej cURL (albo fsockopen).
Kawałe kodu do JS (wymaga jQuery), nieco skróciłem aby nie zamazać obrazu całości zbędnym kodem: Kod function saveNews() { if($("#form_news_id").val() == '') { $("#form_news_id").val('0'); } //Add news if id empty - just for 100% sure of id var id = $("#form_news_id").val(); var title = $("#form_title").val(); var content = $("#form_content").val(); var commentsChBox = $('#comments_checkbox').attr('checked'); dataForSave = {"command":"saveNews", "params":{"id":id, "title":title, "content":content, "comments_chbox":commentsChBox}}; postJSON("pages/ajax.news.php", dataForSave, function(data) { msg_content(data["code"], data["desc"]); if(data["data"]=="true") { showFilteredNewsTable(); } //If user can correct produced error do not reaload table }, function(data) { msg_content("err", "error"); }); } funkcja postJSON: Kod function postJSON(url, data, ok, err) { if(url=="undefined") { alert('Incorrect call to postRequest() - aborting [no url?]'); return false; } if(data=="data") { alert('Incorrect call to postRequest() - aborting [no data?]'); return false; } if(ok=="undefined") { ok = function(data){return;}; } if(err=="undefined") { err = function(){return;}; } var ok = ok; var err = err; $.ajax({ type: 'POST', url: url, data: {"request":$.toJSON(data)}, success: ok, error: err, dataType: "json" }); } biblioteka implementująca $.toJSON (konwersja tablicy na JSON`a): Kod (function($){$.toJSON=function(o)
{if(typeof(JSON)=='object'&&JSON.stringify) return JSON.stringify(o);var type=typeof(o);if(o===null) return"null";if(type=="undefined") return undefined;if(type=="number"||type=="boolean") return o+"";if(type=="string") return $.quoteString(o);if(type=='object') {if(typeof o.toJSON=="function") return $.toJSON(o.toJSON());if(o.constructor===Date) {var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+ hours+':'+minutes+':'+seconds+'.'+milli+'Z"';} if(o.constructor===Array) {var ret=[];for(var i=0;i<o.length;i++) ret.push($.toJSON(o[i])||"null");return"["+ret.join(",")+"]";} var pairs=[];for(var k in o){var name;var type=typeof k;if(type=="number") name='"'+k+'"';else if(type=="string") name=$.quoteString(k);else continue;if(typeof o[k]=="function") continue;var val=$.toJSON(o[k]);pairs.push(name+":"+val);} return"{"+pairs.join(", ")+"}";}};$.evalJSON=function(src) {if(typeof(JSON)=='object'&&JSON.parse) return JSON.parse(src);return eval("("+src+")");};$.secureEvalJSON=function(src) {if(typeof(JSON)=='object'&&JSON.parse) return JSON.parse(src);var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered)) return eval("("+src+")");else throw new SyntaxError("Error parsing JSON, source is not valid.");};$.quoteString=function(string) {if(string.match(_escapeable)) {return'"'+string.replace(_escapeable,function(a) {var c=_meta[a];if(typeof c==='string')return c;c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';} return'"'+string+'"';};var _escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var _meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};})(jQuery); Ten post edytował kiler129 14.02.2011, 14:02:20 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 8 Dołączył: 10.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc, wolałbym uniknąć JS (IMG:style_emoticons/default/smile.gif)
Ale dałeś mi pomysł z cURLem i przekazaniem przez cURL parametrów ! Dzięki ! |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
kiler129 - a słyszałeś o .serializeArray() ?
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście, że słyszałem ale w całym swoim kodzie używam JSON (do cachowania treści również) ponieważ jest szybszy i nie wymusza typów (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Ale ta funkcja jak czytamy w opisie:
Cytat The .serializeArray() method creates a JavaScript array of objects, ready to be encoded as a JSON string. właśnie robi to co chcesz, tak mi się wydaje przynajmniej... Ten post edytował fifi209 14.02.2011, 14:32:43 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie, ta funckja robi to samo co serialize() w php (IMG:style_emoticons/default/smile.gif)
Dopiero później można ją JSONować (i wtedy mieć JSON z typami danych). |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Tak to jest jak człowiek jest chory i czyta tylko: be encoded as a JSON string ;d
Oczywiście masz rację. Zwracam honor ;] </offtopic> |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Najlepiej zobacz sobie Facebook API (SDK dla PHP) albo jakieś GG API (SDK dla PHP)...
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 8 Dołączył: 10.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem to poprzez CURL + POST i fajnie chodzi (IMG:style_emoticons/default/smile.gif)
Z tym że wiecie może jak zrobić że np robie taką tablicę: I jak po stronie serwera wywołać funkcję tą z tablicy ? Oczywiście mam ją gotową z tym że nie wiem jak wywołać jako funkcję string z tablicy ? Zostaje tylko porównywanie IFem ? Mam nadzieje że się dobrze wyraziłem i mnie zrozumiecie :-) --- Rozwiązanie banalnie proste i działa (IMG:style_emoticons/default/wink.gif)
Ten post edytował Damiankossek 14.02.2011, 23:00:38 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Uważaj z tym!
Różnie działa (a czasami nie działa) na różnych wersjach php. Lepiej użyj http://www.php.net/manual/en/function.call-user-func.php |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 8 Dołączył: 10.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki , tak właśnie myślałem nad tym że mogą być różne konflikty na serverach, skoro to jest prawidłowa metoda to ją zastosuje (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Coby nie być gołosłownym, niedawno podobny problem miałem: http://forum.php.pl/index.php?showtopic=163369&hl=
Ten post edytował kiler129 15.02.2011, 01:17:58 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) ![]() ![]() |
Uważam lebiej z tym $sayhello($value). Co w wypadku jak ktoś poda $sayhello='file_get_contents'; i $value='jakisplikzhaslamidobazydanych.php'? Bezpieczeństwo przede wszystkim.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 118 Pomógł: 8 Dołączył: 10.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Słuszna uwaga, lecz zastosowałem call_user_func_array(). Działa OK
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) ![]() ![]() |
Nadal będzie działać to, co wyżej opisałem. Zrób najlepiej tablicę z dozwolonymi metodami i filtruj przez in_array.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:39 |