IE8版本8.0.7600及以下出现JSON原始值无效。

4

当我在IE8版本8.0.7600及更低版本中进行ajax请求时,我会收到“Invalid JSON Primitive: undefined”的错误提示,但在8.0.7601或更高版本中无法复制该错误。 有人知道为什么或如何修复它吗?

$.ajax({
    url: defaults.url + (defaults.url.indexOf('?') > 0 ? '&' : '?') + 'r=' + Math.random(),
    type: defaults.method,
    contentType: 'application/json',
    dataType: defaults.dataType,
    data: ko.toJSON(defaults.data),
    beforeSend: function (xhr, settings) {
        xhr.setRequestHeader("URL_REFERRER", config.urlReferrer);
        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    },
)}

控制器

public virtual JsonResult CompleteOrder(string id)
{
    _entitlementsService.CompleteOrder(AuthenticateManager.CurrentUserProfile.UserModel.UserId, id);
    return Json(new SuccessResponse("Order completed"));
}

请求

Request URL:http://localhost:16253/DashboardSetup/Entitlements/CompleteOrder/c8e053d9-a458-11e1-8dd0-001cc4565d26?r=0.8639180345926434
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:0
Content-Type:application/json
Cookie:MYNGCONNECT=56053B332B26A0FD9D0A31C5FC83868281D876DB1F365034306F6CB3A64C5B2F7
Host:localhost:16253
Origin:http://localhost:16253
Referer:http://localhost:16253/DashboardSetup/Entitlements/Entitlement?SearchResults=True&id=c8e053d9-a458-11e1-8dd0-001cc4565d26
URL_REFERRER:http://localhost:16253/DashboardSetup/Entitlements
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
X-Requested-With:XMLHttpRequest
Query String Parametersview URL encoded
r:0.8639180345926434

你的 defaults.data 到底是字符串还是对象还不太清楚。如果是对象,尝试将其转换为字符串,因为你正在使用 Knockout.js,可以使用 ko.utils.stringifyJson 方法。只是一个尝试,我不确定是否有效。我曾经遇到过类似的问题。 - Suave Nti
问题是我无法在我的电脑上复制它,因为我没有那个IE8版本。Knockout的网站明确说明:“ko.toJSON - 这将生成表示您的视图模型数据的JSON字符串。”defaults.data是一个JSON对象。 - Mike Flynn
你能发布JSON吗?我打赌它是转义字符的问题。 - Dimitri
你在这里想干嘛?defaults.url + (defaults.url.indexOf('?') > 0 ? '&' : '?') + 'r=' + Math.random()。如果你不想要缓存,只需使用 cache:false - Anders
@MikeFlynn 如果你的后端配置正确,这会有所帮助。 - Anders
显示剩余6条评论
1个回答

0
将您的contentType更改为"text/json"或"text/plain"。较旧版本的IE在标头中需要不同的内容类型设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接