Subversion Repositories munaweb

Rev

Rev 3 | Rev 5 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
<!DOCTYPE html>
2
<html lang="en">
3
 
4
<head>
5
    <title>eBay Listing Promotion</title>
6
    <meta charset="UTF-8">
7
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
9
    <link rel="icon" href="favicon.ico" type="image/x-icon">
10
 
11
    <script src="js/jquery.js"></script>
12
    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
13
    <link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
14
    <link rel="stylesheet" href="css/style.css">
15
    <script src="js/XMLWriter.js"></script>
16
    <script src="js/vkbeautify.js"></script>
17
    <script src="js/lodash.min.js"></script>
18
    <script src="js/XMLparse.js"></script>
19
    <script src="js/moment.js"></script>
20
    <script src="js/moment-timezone.js"></script>
21
    <script src="js/muna-tools.js"></script>
22
</head>
23
 
24
<body onload="return initConfig();">
25
    <div class="w3-main">
26
        <div class="w3-container w3-padding w3-margin w3-card-4">
27
            <div class="w3-container w3-gray" style="height:100px">
28
                <img class="w3-image" src="images/MUNA%20-%20Logo%20100x100.png" alt="MUNA Trading Logo" style="height:100px">
29
                <p id="connected" class="w3-xxlarge w3-right">eBay Listing Promotion
30
                    <input id="login" type="button" class="w3-btn w3-large w3-green w3-margin w3-round-large w3-ripple w3-right w3-hide" onclick="eBayLogin();" value="Login" />
31
               	</p>
32
            </div>
33
 
34
            <div class="w3-row">
35
                <div>
36
                    <form id="searchForm" class="w3-container w3-light-grey w3-padding w3-small" onsubmit="return getListingsForPromote();">
37
                        <div class="w3-container w3-card-2 w3-cell w3-padding">
38
                        	<textarea id="bearer" rows="4" cols="80"></textarea>
39
                            <input id="promoteButton" type="button" class="w3-btn w3-large w3-red w3-margin w3-round-large w3-ripple" onclick="getListingsForPromote();" value="Promote" />
40
                        </div>
41
                    </form>
42
                </div>
43
                <div id="progressBarDiv" class="w3-container w3-padding w3-margin w3-card-4 w3-hide">
44
                  	<h2 id="progressBarHeader"></h2>
45
                    <div class="w3-light-grey">
46
                        <div id="progressBar" class="w3-container w3-green w3-center" style="width:0%">0%</div>
47
                    </div>
48
                </div>
49
                <div id="results" class="w3-container w3-padding w3-card-4 w3-hide"></div>
50
                <div id="logging" class="w3-container w3-padding"></div>
51
            </div>
52
        </div>
53
 
54
        <footer class="w3-container w3-center w3-border-top w3-margin">
55
            Copyright &#169; 2018 MUNA Trading. All rights reserved.
56
        </footer>
57
 
58
    </div>
59
 
60
    <script>
61
 
62
// Config
63
var configCampaignId = '10477406018';
64
 
65
var pagesToProcess = 0;
66
var pagesProcessed = 0;
67
var html = [];
68
 
69
// Initialize Configuration Variables
70
function initConfig() {
71
    eBayAuthToken = readCookie();
72
    if (eBayAuthToken.length > 0) {
73
        connected();
74
    }
75
 
76
    if (eBayAuthTokenFlag === false) {
77
        var x = document.getElementById("login");
78
        if (x.className.indexOf("w3-show") == -1) {
79
            x.className += " w3-show";
80
        }
81
    }
3 - 82
 
83
    getOAuthToken();
2 - 84
}
85
 
86
function requireNewLogin() {
87
    // dummy
88
}
89
 
90
function connected() {
91
    var x;
92
 
93
    eBayAuthTokenFlag = true;
94
    document.getElementById("connected").innerHTML += " (Connected)";
95
 
96
    x = document.getElementById("promoteButton");
97
    x.className = x.className.replace(" w3-red", " w3-black");
98
 
99
    x = document.getElementById("login");
100
    x.className = x.className.replace(" w3-show", "");
101
 
102
    x = document.getElementById("results");
103
    x.innerHTML = "";
104
    x.className = x.className.replace(" w3-show", "");
105
    x.className = x.className.replace("process-errors", "");
106
}
107
 
108
function getListingsForPromote() {
109
    var x;
110
 
111
    if (eBayAuthTokenFlag === false) {
112
        return;
113
    }
114
 
115
    userAccessToken = document.getElementById("bearer").value;
116
    if (userAccessToken.length < 1) {
117
        return;
118
    }
119
 
120
    document.getElementById("logging").innerHTML = '';
121
 
122
    x = document.getElementById("results");
123
    if (x.className.indexOf("w3-show") == -1) {
124
        x.className += " w3-show";
125
    }
126
    x.innerHTML = '<p><strong>Retrieving Listings...</strong></p>';
127
    x.className = x.className.replace("process-errors", "");
128
 
129
    pagesToProcess = 1;
130
    pagesProcessed = 0;
131
    initProgressBar("Retrieving Listings...");
132
    eBaySearch(1);
133
 
134
    function checkpagesToProcess() {
135
        if (pagesToProcess > 0) {
136
            window.setTimeout(checkpagesToProcess, 300); // wait 100 milliseconds
137
        } else {
138
            endProgressBar();
139
            document.getElementById("results").innerHTML += '<p><strong>Sorting / Cleaning List...</strong></p>';
140
            sortTable();
141
            removeDuplicateRows($('#promoteTable'));
142
            processCurrentAds();
143
        }
144
    }
145
 
146
    checkpagesToProcess();
147
}
148
 
149
function processCurrentAds() {
150
    adsToRead = 1;
151
    getCurrentAds(1);
152
 
153
    function checkAdsToRead() {
154
        if (adsToRead > 0) {
155
            window.setTimeout(checkAdsToRead, 100); // wait 100 milliseconds
156
        } else {
157
            updateAds();
158
        }
159
    }
160
 
161
    checkAdsToRead();
162
}
163
 
164
function updateAds() {
165
    var i = 1;
166
    var pt = document.getElementById("promoteTable");
167
    var x;
168
    var updateList = [];
169
    var addList = [];
170
    var entry;
171
    var maxAds = 500;
172
 
173
    adsToUpdate = 0;
174
 
175
    for (i = 1; i < pt.rows.length; i++) {
176
        if (pt.rows[i].cells[1].innerHTML != pt.rows[i].cells[3].innerHTML) {
177
            entry = '{"bidPercentage":"' + pt.rows[i].cells[1].innerHTML + '","listingId" : "' + pt.rows[i].cells[0].innerHTML + '"}';
178
            if (pt.rows[i].cells[2].innerHTML.length > 0) {
179
                if (updateList.indexOf(entry) == -1) {
180
                    updateList.push(entry);
181
                }
182
            } else {
183
                if (addList.indexOf(entry) == -1) {
184
                    addList.push(entry);
185
                }
186
            }
187
        }
188
    }
189
 
190
    for (i = 0; (i * maxAds) < updateList.length; i++) {
191
        ++adsToUpdate;
192
        updateAd(1, updateList.slice(i * maxAds, (i + 1) * maxAds));
193
    }
194
 
195
    for (i = 0; (i * maxAds) < addList.length; i++) {
196
        ++adsToUpdate;
197
        updateAd(0, addList.slice(i * maxAds, (i + 1) * maxAds));
198
    }
199
 
200
    function checkAdsToUpdate() {
201
        if (adsToUpdate > 0) {
202
            window.setTimeout(checkAdsToUpdate, 100); // wait 100 milliseconds
203
        } else {
204
            x = document.getElementById("results");
205
            x.innerHTML += '<p><strong>Report Finished!</strong></p>';
206
            if (!x.className.includes("process-errors")) {
207
                setTimeout(function() {
208
                    x.className = x.className.replace(" w3-show", "");
209
                }, 3000);
210
            }
211
        }
212
    }
213
 
214
    checkAdsToUpdate();
215
}
216
 
217
function getCurrentAds(pageNumber) {
218
    var i;
219
    var response;
220
    var limit = 500;
221
    url = configeBayAdCampaign;
222
    url += configCampaignId;
223
    url += '/ad?';
224
    url += 'offset=';
225
    url += (pageNumber - 1) * limit;
226
    url += '&limit=';
227
    url += limit;
228
 
229
    var xhttp = new XMLHttpRequest();
230
 
231
    xhttp.onreadystatechange = function() {
232
        if (this.readyState == 4) {
233
            if (this.status == 200) {
234
                response = JSON.parse(this.responseText);
235
 
236
                for (i = 0; i < response.ads.length; i++) {
237
                    itemId = response.ads[i].listingId;
238
                    if (document.getElementById('AdId' + itemId) !== null) {
239
                        document.getElementById('AdId' + itemId).innerHTML = response.ads[i].adId;
240
                        document.getElementById('CurrentRate' + itemId).innerHTML = response.ads[i].bidPercentage;
241
                    }
242
                }
243
 
244
                if (Number(response.total) > (pageNumber * limit)) {
245
                    ++adsToRead;
246
                    document.getElementById("results").innerHTML += '<p><strong>Retrieving Ads (' + pageNumber + '/' + Number((response.total / limit) + 1).toFixed(0) + ')</strong></p>';
247
                    getCurrentAds(pageNumber + 1);
248
                }
249
            }
250
 
251
            --adsToRead;
252
        }
253
    };
254
 
255
    xhttp.open("GET", configProxyUrl, true);
256
    xhttp.setRequestHeader("X-Proxy-Url", encodeURI(url));
257
    xhttp.setRequestHeader('X-Authorization', 'Bearer ' + userAccessToken);
258
    xhttp.send();
259
}
260
 
261
function updateAd(flag, list) {
262
    var xhttp;
263
    var json;
264
    var i;
265
    var obj;
266
 
267
    if (list.length === 0) {
268
        return;
269
    }
270
 
271
    json = '{"requests":[' + list.join(',') + ']}';
272
 
273
    if (flag) {
274
        url = configeBayAdCampaign;
275
        url += configCampaignId;
276
        url += '/bulk_update_ads_bid_by_listing_id';
277
 
278
        xhttp = new XMLHttpRequest();
279
 
280
        xhttp.onreadystatechange = function() {
281
            if (this.readyState == 4) {
282
                obj = JSON.parse(this.responseText);
283
                if (this.status == 200 || this.status == 207) {
284
                    for (i = 0; i < obj.responses.length; i++) {
285
                        if (Number(obj.responses[i].statusCode) == 200) {
286
                            document.getElementById('AdId' + obj.responses[i].listingId).innerHTML = obj.responses[i].adId;
287
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).innerHTML = 'Updated';
288
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).style.color = 'green';
289
                        } else {
290
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).innerHTML = 'Update Failed (';
291
                            if (obj.responses[i].errors !== undefined) {
292
                                document.getElementById('UpdateStatus' + obj.responses[i].listingId).innerHTML += obj.responses[i].errors[0].message;
293
                            } else if (obj.responses[i].statusCode !== undefined) {
294
                                document.getElementById('UpdateStatus' + obj.responses[i].listingId).innerHTML += obj.responses[i].statusCode;
295
                            }
296
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).innerHTML += ')';
297
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).style.color = 'red';
298
                        }
299
                    }
300
                } else {
301
                    var x = document.getElementById("results");
302
                    x.className += " process-errors";
303
                    x.innerHTML += '<p class="w3-red">Bulk Update Ads: <strong>' + this.status + '</strong></p>';
304
                }
305
 
306
                --adsToRead;
307
            }
308
        };
309
 
310
        xhttp.open("POST", configProxyUrl, true);
311
        xhttp.setRequestHeader("X-Proxy-Url", encodeURI(url));
312
        xhttp.setRequestHeader('X-Authorization', 'Bearer ' + userAccessToken);
313
        xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
314
        xhttp.send(json);
315
 
316
    } else {
317
        url = configeBayAdCampaign;
318
        url += configCampaignId;
319
        url += '/bulk_create_ads_by_listing_id';
320
 
321
        xhttp = new XMLHttpRequest();
322
 
323
        xhttp.onreadystatechange = function() {
324
            if (this.readyState == 4) {
325
                obj = JSON.parse(this.responseText);
326
                if (this.status == 200 || this.status == 207) {
327
                    for (i = 0; i < obj.responses.length; i++) {
328
                        if (Number(obj.responses[i].statusCode) == 201) {
329
                            document.getElementById('AdId' + obj.responses[i].listingId).innerHTML = obj.responses[i].adId;
330
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).innerHTML = 'Added';
331
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).style.color = 'green';
332
                        } else {
333
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).innerHTML = 'Add Failed (' + obj.responses[i].errors[0].message + ')';
334
                            document.getElementById('UpdateStatus' + obj.responses[i].listingId).style.color = 'red';
335
                        }
336
                    }
337
                } else {
338
                    var x = document.getElementById("results");
339
                    x.className += " process-errors";
340
                    x.innerHTML += '<p class="w3-red">Bulk Create Ads: <strong>' + this.status + '</strong></p>';
341
                }
342
 
343
                --adsToRead;
344
            }
345
        };
346
 
347
        xhttp.open("POST", configProxyUrl, true);
348
        xhttp.setRequestHeader("X-Proxy-Url", encodeURI(url));
349
        xhttp.setRequestHeader('X-Authorization', 'Bearer ' + userAccessToken);
350
        xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
351
        xhttp.send(json);
352
    }
353
 
354
    --adsToUpdate;
355
}
356
 
357
 
358
// Build an HTML table to display search results
359
function eBaySearch(pageNo) {
360
    var i;
361
    var xml;
362
 
363
    if (eBayAuthTokenFlag === false) {
364
        return;
365
    }
366
 
367
    var xw = new XMLWriter('UTF-8', '1.0');
368
    var xhr = new XMLHttpRequest();
369
 
370
    if (!createAddXMLSearch(xw, xhr, 'GetSellerList', pageNo)) {
371
        return;
372
    }
373
 
374
    xml = xw.flush();
375
    xw.close();
376
    //window.alert(vkbeautify.xml(xml));
377
 
378
    xhr.onload = function() {
379
        var obj = XMLparse(xhr.responseXML);
380
        //window.alert(JSON.stringify(obj));
381
        //window.alert(vkbeautify.xml(xhr.responseText));
382
 
383
        var returnCode = obj.Ack;
384
 
385
        var x = document.getElementById("results");
386
 
387
        if (returnCode == 'Success') {
388
            createTable(obj.ItemArray, pageNo, Number(obj.PaginationResult.TotalNumberOfPages));
389
 
390
            if (Number(obj.PaginationResult.TotalNumberOfPages) > pageNo) {
391
                maxPagesToProcess = Number(obj.PaginationResult.TotalNumberOfPages);
392
                ++pagesToProcess;
393
                eBaySearch(pageNo + 1);
394
            }
395
 
396
            updateProgressBar(maxPagesToProcess, pagesProcessed);
397
        } else {
398
            x.className += " process-errors";
399
            x.innerHTML += '<p class="w3-red"><strong>' + returnCode + ':</strong></p>';
400
            var errors = obj.Errors;
401
            x.innerHTML += "<p>";
402
            if (errors.length > 0) {
403
                for (i = 0; i < errors.length; i++) {
404
                    x.innerHTML += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
405
                }
406
            } else {
407
                x.innerHTML += obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "<br/>";
408
            }
409
            x.innerHTML += "</p>";
410
        }
411
 
412
        --pagesToProcess;
413
        ++pagesProcessed;
414
 
415
        document.getElementById("logging").innerHTML = html.join('');
416
        updateProgressBar(maxPagesToProcess, pagesProcessed);
417
    };
418
 
419
    xhr.send(xml);
420
}
421
 
422
function createAddXMLSearch(xw, xhr, callname, pageNo) {
423
    var startDate = moment(moment().subtract(31, "days").format('YYYY-MM-DD') + " 00:00:00", "YYYY-MM-DD HH:mm:ss").tz("UTC").toISOString();
424
    var todayDate = moment(moment().format('YYYY-MM-DD') + " 23:59:59", "YYYY-MM-DD HH:mm:ss").tz("UTC").toISOString();
425
    var endDate = moment(moment().add(31, "days").format('YYYY-MM-DD') + " 00:00:00", "YYYY-MM-DD HH:mm:ss").tz("UTC").toISOString();
426
 
427
    xw.writeStartDocument();
428
    xw.writeStartElement(callname + "Request");
429
    xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
430
 
431
    xw.writeStartElement('RequesterCredentials');
432
    xw.writeElementString('eBayAuthToken', eBayAuthToken);
433
    xw.writeEndElement(); /* RequesterCredentials */
434
 
435
    xw.writeElementString('GranularityLevel', 'Coarse');
436
    xw.writeElementString('StartTimeFrom', startDate);
437
    xw.writeElementString('StartTimeTo', todayDate);
438
    xw.writeElementString('EndTimeFrom', todayDate);
439
    xw.writeElementString('EndTimeTo', endDate);
440
    xw.writeElementString('OutputSelector', 'ItemArray.Item.ItemID');
441
    xw.writeElementString('OutputSelector', 'ItemArray.Item.ListingType');
442
    xw.writeElementString('OutputSelector', 'PaginationResult');
443
    xw.writeElementString('OutputSelector', 'ItemArray.Item.SellingStatus.ConvertedCurrentPrice');
444
    xw.writeStartElement('Pagination');
445
    xw.writeElementString('EntriesPerPage', '200');
446
    xw.writeElementString('PageNumber', '' + pageNo);
447
    xw.writeEndElement(); /* Pagination*/
448
 
449
    xw.writeElementString('ErrorLanguage', 'en_US');
450
    xw.writeElementString('Version', configeBayTradingVersion);
451
    xw.writeElementString('WarningLevel', configWarningLevel);
452
 
453
    xw.writeEndElement(); /* xmlrequest */
454
    xw.writeEndDocument();
455
 
456
    xhr.open('POST', configProxyUrl, true);
457
    xhr.setRequestHeader('Content-Type', 'text/xml');
458
    xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
459
    xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
460
    xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
461
    xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
462
    xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
463
    xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
464
    xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
465
 
466
    return true;
467
}
468
 
469
function createTable(obj, pageNumber, totalPages) {
470
    var currentPrice;
471
    var adRate;
472
 
473
    if (pageNumber == 1) {
474
        document.getElementById("logging").innerHTML = '';
475
        html = [];
476
 
477
        html.push('<h3>Listing Promotions</h3>');
478
        html.push('<div class="w3-responsive">');
479
        html.push('<table id="promoteTable" class="w3-table-all w3-hoverable">');
480
        html.push('<thead>');
481
        html.push('<tr>');
482
 
483
        html.push(tableHeader('Item ID'));
484
        html.push(tableHeader('New Ad Rate'));
485
        html.push(tableHeader('Ad Id'));
486
        html.push(tableHeader('Current Ad Rate'));
487
        html.push(tableHeader('Create/Update Status'));
488
 
489
        html.push('</tr>');
490
        html.push('</thead>');
491
        html.push('<tbody>');
492
    }
493
 
494
    for (var entry = 0; entry < obj.length; entry++) {
495
 
496
        if (obj[entry].ListingType == 'Chinese') {
497
            continue;
498
        }
499
 
500
        currentPrice = Number(obj[entry].SellingStatus.text).toFixed(2);
501
 
502
        // minimum ad rate is 1.00%
503
        if (currentPrice > 99.99) {
504
            adRate = 2.0;
505
        } else if (currentPrice > 49.99) {
506
            adRate = 2.7;
507
        } else if (currentPrice > 29.99) {
508
            adRate = 3.0;
509
        } else if (currentPrice > 19.99) {
510
            adRate = 3.2;
511
        } else if (currentPrice > 14.99) {
512
            adRate = 3.5;
513
        } else if (currentPrice > 9.99) {
514
            adRate = 3.7;
515
        } else if (currentPrice > 4.99) {
516
            adRate = 4.0;
517
        } else if (currentPrice > 3.99) {
518
            adRate = 4.2;
519
        } else {
520
            continue;
521
        }
522
 
523
        html.push('<tr>');
524
 
525
        html.push(tableCell(obj[entry].ItemID));
526
        html.push(tableCell(Number(adRate).toFixed(1)));
527
        html.push(tableCellLabel('AdId' + obj[entry].ItemID));
528
        html.push(tableCellLabel('CurrentRate' + obj[entry].ItemID));
529
        html.push(tableCellLabel('UpdateStatus' + obj[entry].ItemID));
530
 
531
        html.push('</tr>');
532
    }
533
 
534
    if (pageNumber == totalPages) {
535
        html.push('</tbody>');
536
        html.push('</table>');
537
        html.push('</div>');
538
    }
539
}
540
 
541
function sortTable() {
542
    var i;
543
    var tbl = document.getElementById("promoteTable").tBodies[0];
544
    var store = [];
545
    for (i = 0, len = tbl.rows.length; i < len; i++) {
546
        var row = tbl.rows[i];
547
        var sortnr = parseFloat(row.cells[0].textContent || row.cells[0].innerText);
548
        if (!isNaN(sortnr)) store.push([sortnr, row]);
549
    }
550
    store.sort(function(x, y) {
551
        return x[0] - y[0];
552
    });
553
    for (i = 0, len = store.length; i < len; i++) {
554
        tbl.appendChild(store[i][1]);
555
    }
556
    store = null;
557
}
558
 
3 - 559
function getOAuthToken() {
560
    var code = "";
561
 
562
	var win = window.open(configeBayLoginUrl, "eBay OAUTH", "");
563
 
564
	var pollTimer = window.setInterval(function() {
565
		if (win.closed !== false) {
566
			window.clearInterval(pollTimer);
567
			getApplicationToken(code);
568
		} else {
569
		    if (code === null || code.length === 0) {
570
                try {
571
                  code = getUrlParameter(win, 'code');
572
                } catch(err) {
573
                  // empty
574
                }
575
		    }
576
		}
577
	}, 200);
578
 
579
}
580
 
581
function getApplicationToken(code) {
582
    var param;
583
 
584
    param = 'grant_type=authorization_code';
585
    param += '&code=' + code;
586
    param += '&redirect_uri=' + configRuName;
587
 
588
    var xhttp = new XMLHttpRequest();
589
 
590
    xhttp.onreadystatechange = function() {
591
        if (this.readyState == 4) {
592
            if (this.status == 200) {
593
                response = JSON.parse(this.responseText);
594
 
595
            	document.getElementById("bearer").innerHTML = getJsonValue(response.access_token);
596
            }
597
        }
598
    };
599
 
600
    xhttp.open("POST", configProxyUrl, true);
601
    xhttp.setRequestHeader("X-Proxy-Url", configOauthTokenUrl);
602
    xhttp.setRequestHeader('X-Authorization', 'Basic ' + btoa(configAppid + ':' + configCertid));
4 - 603
    xhttp.setRequestHeader('X-DECODE-PARAMS', '1');
3 - 604
 
605
    xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
606
    xhttp.send(param);
607
}
2 - 608
    </script>
609
 
610
</body>
611
</html>