Reputation: 75
I have php code that calls a javascript function:
onclick='fightit(0,0,0,0,0)'
Here is the javascript function:
function fightit(nbr,strt,bar,type,action) {
var params = "Nbr="+nbr;
params += "&Strt="+strt;
params += "&Bar="+bar;
params += "&FightType="+type;
params += "&Action="+action;
alert(params);
new Ajax.Updater('div01', 'php/fight.php', {method: 'get', parameters: params, onComplete: div05F});
}
When I call the function and display params I get;
Nbr=1&Strt=0&Bar=0&FightType=0&Action=0
This is what I'm suppose to get but when I use it in my php:
if (!isset($_GET['Action'])) {
$_GET['Action'] = 0;
}
if (isset($_GET['FightType'])) {
$fighttype = $_GET['FightType'];
}
else {
$fighttype = 0;
}
$s = $_GET['FightType'];
Action is set but FightType is not when I execute this line of code:
$s = $_GET['FightType'];
I get:
Undefined index: FightType in C:\wamp\www\hand\php\div08F.php on line 10
Any ideas where I'm going wrong?
Upvotes: 1
Views: 1691
Reputation: 26320
Instead of using Ajax prototype, try to use jQuery.ajax:
function fightit(nbr,strt,bar,type,action) {
jQuery.ajax({
url: 'php/fight.php',
type: 'GET',
data: {'Nbr': nbr, 'Strt': strt, 'Bar': bar, 'FightType': type, 'Action': action}
});
}
Upvotes: 0
Reputation: 3535
EDIT2: OK, with that information, I tested out. I think you are using one file, so I set up a mock php file to test things. I removed the onComplete and set a div with the update. Here is the result that works. Let me know if it helps:
<?php
if ( isset($_GET['Nbr']) ){
// here Nbr is set, so we drop into outputting xml... you can do more before this
// and you can open a separate file, but didn't know how things were set up for you.
header('Content-Type: text/xml');
$out = $_GET['Nbr'].','
.(isset($_GET['Strt'])?$_GET['Strt']:'').','
.(isset($_GET['Bar'])?$_GET['Bar']:'').','
.(isset($_GET['FightType'])?$_GET['FightType']:'').','
.(isset($_GET['Action'])?$_GET['Action']:'');
print '<?xml version="1.0" encoding="UTF-8" standalone="yes"?'.'><span>'.htmlentities($out).'</span>';
exit();
}
?>
<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function fightit(nbr,strt,bar,type,action) {
var params = "Nbr=" + nbr
+ "&Strt=" + strt
+ "&Bar=" + bar
+ "&FightType=" + type
+ "&Action=" + action;
alert(params);
// this is actually calling itself with '/t.php' and updating div01
new Ajax.Updater('div01', '/t.php', {method: 'get', parameters: params});
}
</script>
</head>
<body>
<table style="border-style:none;">
<tr>
<td style="border-style:none;">
<input style="width:150px; text-align:center;" type="button" value="Steal" onclick="stealit()" />
</td>
<td id="fightBtn" style="border-style:none;"><input style="width:150px; text-align:center;" type="button" value="Fight" onclick="fightit(0,0,0,0,0)" />
</td>
</tr>
<div id="div01"></div>
</body>
</html>
ORIGINAL:
You are getting the fighttype error, because even though you check for it, you still use it after the check without rechecking ($_GET['FightType']
still doesn't exist). Try this:
if (isset($_GET['FightType'])) {
$fighttype = $_GET['FightType'];
}
else {
$fighttype = 0;
}
$s = $fighttype;
EDIT: to fix the ajax, try parameters like this (you might have to change the function variable names):
new Ajax.Updater('div01', 'php/fight.php', {method: 'get', parameters: {Nbr: nbr, Strt: strt, Bar: bar, FightType: type, Action: action}, onComplete: div05F})
Upvotes: 1
Reputation: 3900
Try this instead:
function fightit(nbr,strt,bar,type,action) {
var params = "{Nbr:" + nbr + ",Strt:" + strt + ",Bar:" + bar + "FightType:" + type + ",Action:" + action}";
etc...
EDIT: OK, this is essentially the same as craniumonempty's suggestion, which was posted before mine.
EDIT: For the sake of completeness, and in response to craniumonempty's comment: This should probably rather (and simpler) be:
var params = {Nbr:nbr, Strt:strt, Bar:bar, FightType:type, Action:action};
Upvotes: 0