jQuery POST请求 - 返回JSON

问题描述:

我想使用jQuery $.ajax进行POST调用发送一些信息(通过POST,如:page.aspx?var1=value ....)。jQuery POST请求 - 返回JSON

但我也希望jQuery来处理该服务返回JSON,以便我找回一个JSON对象。

var data = {name: _name, ...}; 

var request = $.ajax({ 
    url: url, 
    type: "post", 
    data: data, 
    //dataType: "json" 
}); 

只要我使用dataType: "json",这让我接收JSON对象,我得到对请求进行parseerror!

希望你能帮我解决这个问题!

感谢您的支持!

+0

什么是你得到确切的错误? – 2013-02-28 08:34:09

+0

你可以在请求中设置一个类似于“Content-Type:application/json”的头文件,jQuery将自动地知道它得到了什么。 – Merec 2013-02-28 08:35:13

+1

如果你得到一个分析错误,这可能意味着你的JSON是无效的。你能粘贴你返回的JSON字符串吗?这可能是语法在某个地方被打破了。 – Lev 2013-02-28 08:35:13

确保您的serverside脚本返回编码的json。

在php中使用json_encode()

echo json_encode($response); 

$.ajax调用设置dataType : 'json'

+1

圣洁的废话!你们很快就变得怪异了!感谢那!! – Nik 2013-02-28 08:40:15

+0

正确的方法是通过'header('Content-type:application/json');'...在POST文件上设置标题这迫使服务器将其识别为json。在那个时候不需要'dataType:json'。 – PlantTheIdea 2013-02-28 08:40:34

+0

@ user2118781好吧,它可以帮助你还是一样...让我知道更多的帮助.. – 2013-02-28 08:45:48

首先,post请求没有在URL之后附加的参数。您指定的格式用于GET请求。 你可以用以下达到同样的目标:

$.post(
'/yourURLL', 
{'data' : dataJson}, 
function(data){ 
    handleIncomingJSON(data); 
}).error(function(data, textStatus){handleUnsuccessfulSave(data, textStatus)}); 

从你必须让数据以JSON格式 像

echo json_encode($response); 

请求的URL,然后你会得到成功的功能一样,响应JSON这样的:

 $.ajax({ 
      type:"POST", 
      url: "your_url", 
      data:data, 
      success: function (response){ 
       var arr = $.parseJSON(response); 

      } 
     }); 
+2

以我自己的经验,当调用浏览器本机JSON解析器而不是使用jQuery库进行解析时,我获得了最佳结果。所有现代浏览器现在都支持这种方法,使其成为跨浏览器兼容性的更好方法。 'var arr = JSON.parse(response);' – Epiphany 2014-10-13 08:17:13

按照该jQuery $.post documentation,我强烈建议执行所有主要的回调方法(donefailalways)开始,这样,如果有你的JSON响应错误,那么它们不会隐藏:

var jqxhr = $.post( 
    "example.php", 
    function(response) {var arr = JSON.parse(response);}, 
    'json' 
) 
.done(function() {console.log("second success");}) 
.fail(function() {console.log("error");}) 
.always(function() {console.log("finished");});