parseJSON错误:JSON数据的第1行第2列的意外字符

时间:2016-03-08 10:52:10

标签: php jquery json ajax

我有一个像这样的PHP脚本:

$STL = array();
$filter = array();
$filter['sort_by'] = "date_added";
$filter['sale'] = "F";
$filter['per_page'] = "12";
$STL['filter'] = $filter;
echo json_encode($STL);

这给出了以下输出:

{"filter":{"sort_by":"date_added","sale":"F","per_page":"12"}}

我正在尝试像这样使用parseJSON:

$.ajax({ 
    url: 'myPHP.php',
    type: 'post',
    data : get_session,
    async: false,
    dataType: 'json',
    success: function(result) {
        var json = $.parseJSON(result);         
    } 
});

但我得到以下结果:

  

SyntaxError:JSON.parse:JSON数据第1行第2列的意外字符

我猜测json字符串在PHP中没有正确格式化。我错了什么?

3 个答案:

答案 0 :(得分:3)

如果你已经在成功回调中使用return (31 + num) * 31 + denom;,那么从AJAX属性中移除using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; using System.IO; namespace ConsoleApplication1 { class Program { const string FILENAME = @"c:\temp\test.xml"; static void Main(string[] args) { string XMLText = File.ReadAllText(FILENAME); List<Rate> myRates = new List<Rate>(); using (XmlReader reader = XmlReader.Create(new StringReader(XMLText))) { while (!reader.EOF) { if (reader.Name != "rate") { reader.ReadToFollowing("rate"); } if(!reader.EOF) { XElement xRate = (XElement)XElement.ReadFrom(reader); Rate rate = new Rate(); rate.Category = xRate.Attribute("category").Value; //text of current Node : Catagory DateTime myDate; if (DateTime.TryParse(xRate.Attribute("date").Value, out myDate)) { rate.Date = myDate; } Console.WriteLine("value Element=" + xRate.Element("value").Value); //test: reader.Value does not the data decimal myValue; if (Decimal.TryParse(xRate.Element("value").Value, out myValue)) { rate.Value = myValue; } else { rate.Value = -1; // this is what happens because reader.value == "" } //return collection with result myRates.Add(rate); } } } } public class Rate { public DateTime Date { get; set; } public decimal Value { get; set; } public string Category { get; set; } } } } 。或者通过保留$.parseJSON(result)来使用另一种方式,因为你期望JSON已经作为结果并删除dataType: 'json',。只使用其中一个。

答案 1 :(得分:3)

当您指定dataType: 'json'(或jQuery检测到JSON响应)时,它会自动为您解析JSON。如果您再尝试解析生成的对象,则会收到您看到的错误。 result函数的success参数已经是您可以使用的对象。

另请注意,您应 从不 使用async: false。使用它是一种可怕的做法,因为它会阻止UI线程,直到AJAX请求完成。这看起来像浏览器崩溃的用户。从设置中删除该属性,并将所有代码依赖于success处理程序中的AJAX结果。

试试这个:

$.ajax({ 
    url: 'myPHP.php',
    type: 'post',
    data : get_session,
    dataType: 'json',
    success: function(result) {
        console.log(result);      
    } 
});

答案 2 :(得分:1)

错误
SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
 当您的json对象无效时发生。对于这种情况,你可以通过jsonlint检查你的json,
 但是对于这种情况,由于在你的ajax请求中使用dataType: 'json',你的输出已经被解析了josn

{"filter":{"sort_by":"date_added","sale":"F","per_page":"12"}}

$.parseJSON(result)将字符串转换为JSON
您的请求响应已经是有效的JSON,$.parseJSON(string)返回错误