Sending json data to a remote server – howto

21. April 2016 at 14:00

firebug

If you’re sending json requests there are different possible solutions on programming with php. Here some different explained:

1. Using Streams

‚method‘ => ‚POST‘,
‚content‘ => json_encode( $data ),
‚header’=> „Content-Type: application/json\r\n“ .
„Accept: application/json\r\n“
)
);

$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result);
var_dump($response);

2. Raw HTTP Post

Using Zend Framework’s HTTP client: http://framework.zend.com/manual/en/zend.http.client.advanced.html#zend.http.client.raw_post_data

$json = json_encode($data);
$client = new Zend_Http_Client($url);
$client->setRawData($json, ‚application/json‘)->request(‚POST‘);
var_dump($client->request()->getBody());

3. Using Curl

<?php
$content = json_encode($data);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
        array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //curl error SSL certificate problem, verify that the CA cert is OK
$result     = curl_exec($curl);
$response   = json_decode($result);
var_dump($response);
curl_close($curl);
?>

4. Using Ajax

var data = <?php echo json_encode($data) ?>;
var url  = '<?php echo $url ?>';
jQuery.ajax({
    type: "POST",
    url: url,
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){
        var jsonObj = jQuery.parseJSON(data);
        alert(jsonObj.encPassword);
    },
    failure: function(errorMsg) {
        alert(errorMsg);
    }
});

Please share this article von facebook & google plus or where you want, thank you!

Fix: TypeError: jQuery(.sf-menu).superfish is not a function

14. September 2015 at 15:40

XHTML

If you’re working with the superfish drop down menu and you’re getting the error message „TypeError: jQuery(.sf-menu).superfish is not a function“ it is possible that you’re loading the jquery script twice, e.g.:

<script type="text/javascript" src="/assets/js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="/skin/frontend/default/default/js/jquery-1.11.1.min.js"></script>

Solution 1

Remove the dublicated js-implementation (remove one of this lines)

Solution 2

If you need to include two versions of jquery on the same page because of plugin support or so …
Change the lines

jQuery(function(){
	jQuery('.sf-menu').superfish()
})

to

jQuery(function(){
	$(document).ready(function(){
		jQuery('.sf-menu').superfish()
	});
})

if you get an error like „$(document).ready is not a function“
use:

(function($){
	$(document).ready(function(){
		$('.sf-menu').superfish()
	});
})(jQuery);

Please share this article von facebook & google plus or where you want, thank you!

Magento: Fixing error „[unknown object].fireEvent()“

8. Januar 2015 at 10:02

Recently I’ve encountered the following Javascript error in my Magento store:

error: error in [unknown object].fireEvent():
event name: address_country_changed
error message: zipElement.up(…).down(…) is undefined

This error pops out when creating the order from admin panel and entering customer shipping address. It pops out when editing every filed in the address, which is quite annoying.

Regarding to this forum post, this has something to do with defining the zip code as not required filed in the database. Specialists recommend to set zip code as required filed in the database and then setting it as not required on the country basis. But people report that setting so will still not make zip code as optional field.

So I decided to do my own fix. Here it is:

1. Copy the file app\design\adminhtml\default\default\template\directory\js\optional_zip_countries.phtml to your local design-folder like

app\design\adminhtml\default\fly2marsmedia\template\directory\js\optional_zip_countries.phtml

2. Navigate approximately to line 57.

3. Find the function setPostcodeOptional(zipElement, country)

4. Find the following line: zipElement.up(1).down(‚label > span.required‘).hide();

5. Change it to the following code:

var zipElementLabel = zipElement.up(1).down('label > span.required');
 if (zipElementLabel)
 zipElementLabel.hide();

6. Find the following line: zipElement.up(1).down(‚label > span.required‘).show();

7. Change it to the following code:

var zipElementLabel = zipElement.up(1).down('label > span.required');
if (zipElementLabel)
zipElementLabel.show();

Notice that this code repeats two times inside the function, but differs a little bit in „hide()“ and „show()“ calls at the end.

8. Save the file and upload to the server. Page reload might be required.

This helped me fighting the mentioned error in Magento version 1.9.0.1 and other versions.

Please share this article von facebook & google plus or where you want, thank you!

Aktualisiertes jQuery Visual Cheat Sheet v1.6

20. Mai 2011 at 21:18

Antonio Lupetti hat sein jQuery Visual Cheat Sheet auf die Version 1.6 aktualisiert. Das aktualisierte Cheat Sheet beinhaltet alle Funktionen und Ausdrücke, die in der jQuery 1.6 API verfügbar sind.

Download:  PDF-Dokument (auch für das iPad optimiert)
Download: Scribd Version

2 Tipps für die Arbeit mit Zend Framework und Ajax – Magento

24. März 2011 at 11:40

isXmlHttpRequest()

/**
* myAction from myController
*/
function myAction()
{
if  ($this->getRequest()->isXmlHttpRequest()) {
// do the handling of your ajax request
}
else {
// if it's not an ajax request then do regular handling here
}
}

JSON action helper

/**
* myAction from myController
*/
function myAction()
{
if ($this->getRequest()->isXmlHttpRequest()) {
// do the handling of your ajax request
$myArrayofData = array('a','b','c');
//encode your data into JSON and send the response
$this->_helper->json($myArrayofData);
//nothing else will get executed after the line above
}
else {
// if it's not an ajax request then do regular handling here
}
}
Weitere Tipps / nützliche Funktionen? Postet diese als Kommentar zum Artikel und ich nehme diese, wenn sinnvoll, mit in den Artikel auf.

Video: Tiefer Einblick in JQuery von Ben Nadel

9. Februar 2011 at 12:59

Die mächtige und umfangreiche Javascript-Bibliothek jQuery, mittlerweile in Version 1.5 verfügbar, sollte jedem Webentwickler ein Begriff sein. Gerade da diese sehr umfangreich ist, ist es oft hilfreich verschiedene Tutorials zu lesen, sind Bücher doch zu schnell nicht mehr auf dem aktuellen Stand.

Sehr zu empfehlen ist das Video Tutorial von JQuery Chief Web Developer Ben Nadel.  In dem Video gibt er in Form einer Präsentation einen intensiven Einblick in jQuery und mit all seinen Komponenten. Er geht zwar nur kurz auf die einzelnen Bestandteile ein, zeigt allerdings diese auch anhand kleiner Beispiele. Ca. 100 Minuten Videomaterial sind enthalten.

Sehr empfehlenswert für jQuery Einsteiger und Entwickler über diesem Level hinaus.

Zum Video “An Intensive Exploration Of jQuery With Ben Nadel”

Magento – Form per Ajax Request absenden

26. Juli 2010 at 18:12

Hier ein Beispiel (Produkt zum Warenkorb hinzufügen) zum absenden eines Form per Ajax Request in Magento:

<script type="text/javascript">
 //<![CDATA[
 var productAddToCartForm = new VarienForm('product_addtocart_form');
 productAddToCartForm.submit = function(product_name) {
 if (this.validator.validate()) {
new Ajax.Request($('product_addtocart_form').action, {
 parameters: Form.serialize($('product_addtocart_form'), true),
 area: $('product_addtocart_form'),
 onComplete: function (transport) { }
 });
}
 }.bind(productAddToCartForm);
 //]]>
</script>

Alternative Code aus dem Newsletter

<script type="text/javascript">
//<![CDATA[
function submitSubscribe() {
 new Ajax.Request('<?php echo Mage::getBaseUrl() ?>newsletter/subscriber/newajax/',
 {
 method:'post',
 parameters: $('newsletter-subscribe').serialize(true),
 onLoading: function(){
 $('subscribe_update_div').show();
 $('subscribe_update_div').innerHTML = "<?php echo $this->__('Sending subcribe request ...'); ?>";
 },
 onSuccess: function(transport){
 var response = transport.responseText.evalJSON();
 $('subscribe_update_div').innerHTML = response.message;
 },
 onFailure: function(){
 $('subscribe_update_div').innerHTML = "<?php echo $this->__('Something went wrong ...'); ?>";
 }
 });
 }
//]]>
</script>

Mit Prototype Ajax Request ausführen wenn Seite geladen über document.ready – dom loaded function

8. Juli 2010 at 20:31

Ihr möchtet in Prototype ein Ajax-Request nach dem vollständigen Laden der Seite abschicken, habt allerdings kein Zugriff auf den Body-Tag?

Der traditionelle Weg ist den Java-Script-Aufruf vor dem schließenden Body-Tag zu setzen, gelegentlich hat man allerdings nicht immer Zugriff auf diesen, z.B. bei dem Aufruf einer Template-File eines CMS, eCommerce-System oder ähnlich.

Bei Prototype ist es möglich das über den Observe zu machen, z.B. so:

<code>Event.observe(window, 'load', function() {
.. do stuff ..
});</code>

Das Problem ist allerdings dass mit dieser Methode der Anwender warten muss bis das komplette Dokument inkl. aller Bilder und anderen Content geladen ist. Erst dann kann er auf der Seite interagieren. Die meisten Benutzer wollen allerdings nicht warten und gleich mit der Interaktion starten.

Hier ist die Prototype implementation des document.ready mit genauer Erläuterung der Funktionalität.

Hier ein kurzes Beispiel:

<script>
document.observe("dom:loaded", function() {
 myFunction();
 });
</script>

Jquery has a handy way of allowing you to do stuff as soon as the document object model for a page has loaded (ie. as soon as the browser has loaded all your markup). I’m currently working on a project that requires Prototype JS, and I had some difficulty finding the equivalent method.. hence this post.

I knew Prototype had evolved somewhat since I’d last used it extensively back in late 2006, and I also suspected they had implemented something similar.. but Google was not forthcoming.

The traditional way to do this (pre jQuery) was to put your javascript directly before the closing body tag. This way the browser is unable to execute it prior to loading the rest of the page. However this is kind of clunky if you are trying to abstract your javascript to a linked file, or would like to keep your behavioral code (javascript) separate to your markup (xhtml).

An alternative is to use the onload event – in Prototype you would use something like

Submit eines Form mit vorheriger JavaScript Abfrage (ja/nein) steuern

26. März 2010 at 15:23

Zwar super simple Sache für jeden der nur ein klein wenig Ahnung von JavaScript hat, aufgrund der Frage eines Freundes wie das geht hier eine kurze Erläuterung. Ausgangssituation ist dass ihr ein Formular (Form-Element) mit einem Input-Submit Button habt. Vor dem absenden des Form möchtet ihr allerdings noch mal den Benutzer fragen ob er das tatsächlich möchte (Ja/Nein-Abfrage).

Das könnt ihr ganz einfach wie folgt umsetzen:

<script language="javascript">function msgBox()
{
  return window.confirm("Wollen Sie wirklich abschicken??");
}
//-->
</script>
<form action="index.php" method="post" name="form1">
<input type="text" name="text1" />
<input type="submit" name="submit1" value="Abschicken" onclick="return msgBox();" />
</form>

Ich hoffe mit diesem simplen Code-Schnippel noch mehr als nur 1 Person geholfen zu haben, deshalb auch die Veröffentlichung hier im Blog!

35 wirklich hilfreiche PHP Tutorials and Techniken für Entwickler

26. März 2010 at 10:23

35 wirklich hilfreiche PHP Tutorials and Techniken für Entwickler. Themen sind neben PHP auch JQuery, MySQL, CSS und alles was das Web-Entwickler-Herz begehrt. Hier geht es zum Link.