使用AJAX将JSON从PHP发送到JavaScript

使用AJAX将JSON从PHP发送到JavaScript,php,ajax,json,Php,Ajax,Json,我在这里把头撞在墙上,我希望有人能帮我 我有一个调用PHP页面的AJAX函数。该页面返回一个JSON对象,然后应该对其进行解析并显示给用户。除了返回JSON对象外,其他一切都正常工作,试图解析它会给出未定义的结果 PHP: $jsonArray= array( 'request' => 'this is the request', 'response' => 'this is the response'

我在这里把头撞在墙上,我希望有人能帮我

我有一个调用PHP页面的AJAX函数。该页面返回一个JSON对象,然后应该对其进行解析并显示给用户。除了返回JSON对象外,其他一切都正常工作,试图解析它会给出未定义的结果

PHP:

$jsonArray= array(
                'request'  => 'this is the request',
                'response' => 'this is the response'
            );
echo json_encode($jsonArray);
在Ajax方面,我执行以下操作:

var display=xmlHttp.responseText;
alert(display); //gives {"request":"this is the request","response":"This is the response"}
alert(display.request); //gives undefined

我错过了什么明显的东西吗?将同一字符串直接粘贴到JavaScript变量中似乎效果不错……

您需要解析从服务器返回的JSON数据。有许多库可以这样做,例如:


,您需要解析从服务器返回的JSON数据。有许多库可以这样做,例如:


显示是一个字符串。您需要使用

var obj = eval(display)

但是eval()不如使用JSON安全。parse()是一个字符串。您需要使用

var obj = eval(display)

但是eval()不如使用JSON.parse()安全。

您需要解析JSON字符串。JSON.parse应该可以做到这一点。如果它不起作用,那么您编码的对象可能有问题。

您需要解析json字符串。JSON.parse应该可以做到这一点。如果它不起作用,那么您编码的对象可能有问题。

不要忘记将正确的头与JSON对象(text/JSON)一起发送。text/html将起作用,因为两者都是文本,但发送正确的mime类型是一种好的做法。@zzzzBov:不,根据RFC 4627,正确的JSON mime类型是
application/JSON
。您可以使用PHP代码
标题('Content-type:application/json')
在echo语句之前设置它。@idealmachine抱歉,我没有查找正确的mime类型。我的观点仍然是text/html可以工作,因为两者都是文本。别忘了用JSON对象(text/JSON)发送正确的标题。text/html将起作用,因为两者都是文本,但发送正确的mime类型是一种好的做法。@zzzzBov:不,根据RFC 4627,正确的JSON mime类型是
application/JSON
。您可以使用PHP代码
标题('Content-type:application/json')
在echo语句之前设置它。@idealmachine抱歉,我没有查找正确的mime类型。我的观点仍然是text/html可以工作,因为两者都是文本。请在解析来自外部源的脚本之前进行验证。这是跨站点脚本(XSS)中的一个主要原因。如果返回的是对象而不是数组,则代码将不起作用。JavaScript需要括号来消除a)对象文字符号和b)语句块之间的歧义。请在解析来自外部源的脚本之前进行验证。这是跨站点脚本(XSS)中的一个主要原因。如果返回的是对象而不是数组,则代码将不起作用。JavaScript需要括号来消除a)对象文字符号和b)语句块之间的歧义。jQuery的
$文档。parseJSON
:jQuery的
$文档。parseJSON