我现在用我的代码弄得一团糟,通常我会制作一个PHP-AJAX脚本并使用json_encode将一个变量传回JS脚本.这次我想用json_encode传递一些变量,遗憾的是我不知道如何在JS中分离值.
我的JS代码:
$('#submit').click(function(){
// Storing the value into variables
var content_page = $('#content-page').val();
var content_url = 'action=saving&page='+content_page;
// Starting the AJAX post form
$.ajax({
type: 'POST',
url: 'handlers/content.handler.PHP',
data: content_url,
success: function(responseText)
{
$.parseJSON(responseText); // Making the return value of the PHP handler reedable
alert(responseText.pageid)
if(responseText.indexOf(1) > -1)
{
noty({ text: 'U heeft geen pagina gekozen om te bewerken!' });
}
else if(responseText.indexOf(2) > -1)
{
noty({ text: 'U heeft geen geldige pagina gekozen!' });
}
else if(reponseText.indexOf(100) > -1)
{
noty({ text: 'Pagina is opgehaald' });
}
}
});
return false;
});
<?PHP
/* Dit bestand handeld gegevens af voor het bestand content in de map panel. Gegevens komen hier door heen via een JS bestand(content.handler.js...) en worden ook weer terug gestuurd. */
include_once '../includes/config.PHP';
// Controleren of server contact maakt en geen persoon.
if(isset($_POST['action']) && $_POST['action'] == 'saving')
{
$stringPage = trim($_POST['page']);
$error = array();
$bolean = false;
# Prepared statement.
$stmt = $MysqLi->prepare('SELECT id,name,title,text FROM pages WHERE name = ?');
$stmt->bind_param('s', $stringPage);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($pageID, $pageName, $pageTitle, $pageText);
$stmt->fetch();
$intPage = $stmt->num_rows();
$stmt->close();
/* Controle */
if(empty($stringPage))
{
$error[] = 1;
$bolean = true;
}
if($intPage == 0)
{
$error[] = 2;
$bolean = true;
}
if($bolean == false)
{
$error[] = 100;
}
header('Content-Type: application/json');
$array = array($error, $pageID, $pageName, $pageTitle, $pageText);
echo json_encode($array, JSON_FORCE_OBJECT);
}
?>
所以所有的价值都回来了,所以没有问题.我的问题是我把所有我想要的东西放在一个数组中(不是最好的解决方案)而且不知道如何在JS中分离.我建议它会像response.pageid那样但是没有用.
解决方法:
您需要先解析JSON并分配给对象变量.这是你想念的唯一一步.
此外,返回一个json编码数组就好了.我一直这样做.您可以添加“status = success”和“errormessage = someerror”之类的内容,因此它非常方便.
var obj = $.parseJSON(response);
所以在你的情况下,你有PHP中的数组中的值..所以,举个例子来说……
$myarray['fullname'] = 'john doe';
$myarray['userid'] = 777;
$myarray['isadmin'] = false;
$myarray['email'] = johndoe@gmail.com;
你的ajax脚本然后将响应发送回javascript …
echo json_encode($myarray);
javascript在你的ajax成功函数中得到它…
success: function (data) {
var responsedata = $.parseJSON(data);
alert('Fullname: '+responsedata.fullname+' userid: '+responsedata.userid+' isadmin: '+responsedata.isadmin); //etc etc
}
来自CHAT
我在粘贴箱上看了你的代码
用这个看btw的响应
console.dir(responsetext); //instead of alert
或尝试使用firefox
alert(responsetext.toSource());
responsetext本身是一个对象,不会发出任何警报
把响应文本想象成像PHP一样的数组,但不是使用myarray [‘somekey’]而是使用myobj.somekey
将您的错误分配更改为
error[1] , error[2], error[100]
而不是错误[]
你传递错误,所以这是一个数组,你可以像indexOf()一样访问,或者你可以使用textresponse.error [1]
但你的问题是错误数组的键被分配为0,1,2等.
但是你试图将它们称为1,2,100 ……