我有一个像这样的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中没有正确格式化。我错了什么?
答案 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)
返回错误