AJAX responseXML

时间:2012-03-07 01:57:16

标签: javascript ajax string

我有关于ajax的responseXML的问题.. 我有来自回调函数的代码:

var lineString = responseXML.getElementsByTagName('linestring')[0].firstChild.nodeValue;

但是,线串最多只能容纳4096个字符..其余字符将被拒绝。

我不知道用什么来获取lineString的所有值 回报。它是一个非常大的数据,这就是为什么我想使用responseXml AJAX,但事实证明它仍然无法容纳一切。

我的线串由来自我连接的日志文件中的行组成 放线分隔符。我需要以我的形式获取这些数据,这就是为什么在从php读取后,我通过AJAX发回它

你有意见吗?

1 个答案:

答案 0 :(得分:2)

XML为大多数ajax请求添加了大量额外标记。如果您期望某种类型的数据实体列表,那么以JSON格式发送它们是可行的方法。

我使用JSON来获取数据非常庞大的数组。

首先,JSON只是Javascript Object Notation,这意味着Ajax请求将请求一个实际上将被评估为Javascript对象的String。

某些浏览器提供开箱即用的JSON解析支持。其他需要一点帮助。我已经使用this little library来解析我开发的所有webapps中的responseText,并且没有任何问题。

既然你知道JSON是什么以及如何使用它,那么这就是PHP代码的样子。

$response = [
   "success" => true, // I like to send a boolean value to indicate if the request 
                      // was valid and ok or if there was any problem. 
   "records" => [
     $dataEntity1, $dataEntit2 //....
   ]
]; 

echo json_enconde($response );

尝试一下,看看它是什么样的回声。我使用了PHP 5.4数组声明语法,因为它很酷! :)

通过Ajax请求数据时,您可以这样做:

var response
    ,xhr = getAjaxObject(); // XMLHttp or ActiveX or whatever.
xhr.open("POST","your url goes here");
xhr.onreadystatechange=function() {
   if (xhr.readyState==4 && xhr.status==200) {
     try { 
       response = JSON.parse(xhr.responseText);
     } catch (err) {
       response = {
          success : false,
          //other error data
       };
     }

     if(response.success) {
        //your data should be in response
        // response.records should have the dataEntities
        console.debug(response.records); 
     }
   } 
}

回顾:

  1. JSON解析需要通过JSON2库提供一些帮助
  2. PHP可以将地图发送为JSON
  3. 成功布尔值被广泛用作“成功/失败”标志
  4. 此外,如果您使用的是jQuery,则只需在$ .ajax调用中设置dataType:“json”属性即可在成功回调中接收JSON响应。