Bug Tracker

Ticket #2871: mda.php

File mda.php, 2.7 KB (added by the7erm, 12 years ago)

php script used to toggle between the solution and the problem.

Line 
1<?php
2        $raw_post = file_get_contents("php://input");
3        if ($_POST) {
4                ?>$("#res").append(<?php
5                        echo json_encode(
6                                        "raw_post:" . $raw_post . "\n" . print_r($_POST,true)
7                                );
8                ?>);<?php
9                exit;
10        }
11
12?>
13<?php
14        if (!$_GET['fix']) {
15                ?><script type="text/javascript" src="js/jquery-latest.js"></script><?php
16        } else {
17                ?><script type="text/javascript" src="js/jquery-nightly.js"></script><?php
18        }
19?>
20
21<script type="text/javascript">
22
23var array_foo = [0,1,2,[0,1,2]];
24var postObj = {
25  list : array_foo,
26  testObj: {
27             nested :{
28                       nested2: "value",
29                       nested3: "value"
30                     }
31           }
32};
33
34$.post("mda.php", postObj,
35  function(dta) {
36
37  },
38  "script"
39);
40
41</script>
42<pre>
43<a href="mda.phps">The source to this file.</a>
44<a href="js/jquery-nightly.js">jquery-nightly.js with fix.</a>
45<a href="?fix=true">Show this page with the fix applyed.</a>
46
47Code:
48<pre>
49var array_foo = [0,1,2,[0,1,2]];
50var postObj = {
51  list : array_foo,
52  testObj: {
53             nested :{
54                       nested2: "value",
55                       nested3: "value"
56                     }
57           }
58};
59
60$.post("mda.php", postObj,
61  function(dta) {
62
63  },
64  "script"
65);
66</pre>
67
68<?php
69        if (!$_GET['fix']) {
70                ?><a href="?fix=true"><h2>Fix it</h2></a><?php
71        } else {
72                ?><a href="?"><h2>Break it.</h2></a><?php
73        }
74?>
75<h2>Live Test Response</h2>
76<pre id="res" style='border:2px solid #000;'></pre>
77<?php
78if (!$_GET['fix']) {
79        ?><a href="?fix=true">(What you're looking at is what it shouldn't look like. Fix it by clicking this link)</a><?php
80} else {
81        ?><a href="?">(What you're looking at is what it should look like. Break it by clicking this link)</a><?php
82}
83?>
84
85<h1>Solution</h1>
86<b>At line 2871 of the nightly build for 2008-05-15 I changed the param: function.</b>
87<pre>
88param: function( a , pn, d) {
89        if (!d)
90                d=0;
91
92        var t = typeof(a);
93        // We're at the end of the line so return it.
94        if ((t == 'string' || t == 'number' || t == 'boolean' || t == 'undefined') && pn)
95                return pn+'='+encodeURIComponent(a);
96
97        var s = [];
98        if ( (a.constructor == Array && this.name) || a.jquery )
99                // Serialize the form elements
100                jQuery.each( a, function(){
101                        s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
102                });
103        // Otherwise, assume that it's an object of key/value pairs
104        else
105                for ( var j in a ) {
106                        d++;
107                        // prevent infinite recursion.  max of 10 levels deep.
108                        if (d>10)
109                                break;
110                        if (!pn)
111                                // recurse into siblings. with this as parent.
112                                s.push(jQuery.param(a[j], encodeURIComponent(j),d));
113                                else
114                                // recurse into siblings.
115                                s.push(jQuery.param(a[j], pn+"["+encodeURIComponent(j)+"]",d));
116
117                }
118        // Return the resulting serialization
119        return s.join("&").replace(/%20/g, "+");
120}
121</pre>
122