当前位置: 首页 > 知识库问答 >
问题:

在jQuery中使用恢复器函数。ajax请求

阴焱
2023-03-14

我有AJAX响应,其中引用了所有键、值对。我想删除任何数值中的引号。我需要在全球范围内完成这项工作,对于所有AJAX请求,只需付出最小的努力。

我正在使用jQuery.getJSON来处理大多数请求,并且我想要一个不需要单独调整每个当前AJAX请求的解决方案。(我不想在每个现有的$. getJSON调用中添加一个JSON. parse(text, myrestver)调用。)

例如:

Received:    {"age":"31", "money": "-1.329"}
Want:        {"age": 31, "money": -1.329}

对于所有AJAX请求,我该如何做到这一点?

我目前的最终目标是使用JSON. parse(text, reviver)来处理数据(感谢这个问题)。不过,我不知道如何将其连接到jQuery.ajax中。

我尝试过使用ajaxSuccess(),但它似乎无法处理任何数据。例如:

$(document.ajaxSuccess) ( function(j) {
    JSON.parse(j, myReviver);
}

.getJSON(url, data, function(j) {
    // The data in this success function has not been through myReviver.
}

我怎样才能:

  • jQuery中使用恢复器函数。getJSON,或

共有2个答案

慕高格
2023-03-14

您可以覆盖。使用自己的方法获取JSON

本机的getJSON方法可以在这里看到:

https://j11y.io/jquery/#v=git

function (url, data, callback) {
  return jQuery.get(url, data, callback, "json");
}

将回调传递给getJSON,将自己的回调传递给jQuery,这是一件非常简单的事情。使用'text'而不是'json'获取,使用自定义恢复程序解析json,然后调用原始回调。

一个复杂的问题是,传递给getJSON的第二个参数是可选的(与请求一起发送的数据)。

假设总是使用success函数(第三个也是最后一个参数),可以使用rest参数和pop()来获得传递的success函数。创建一个自定义成功函数,该函数接受文本响应并使用自定义的JSON。解析,然后用创建的对象调用传递的成功函数。

const dequoteDigits = json => JSON.parse(
  json,
  (key, val) => (
    typeof val === 'string' && /^[+-]?[0-9]+(?:\.[0-9]+)$/.test(val)
    ? Number(val)
    : val
  )
);
jQuery.getJSON = function (url, ...rest) {
  // normal parameters: url, data (optional), success
  const success = rest.pop();
  const customSuccess = function(textResponse, status, jqXHR) {
    const obj = dequoteDigits(textResponse);
    success.call(this, obj, status, jqXHR);
  };
  // spread the possibly-empty empty array "rest" to put "data" into argument list
  return jQuery.get(url, ...rest, customSuccess, 'text');
};

jQuery.getJSON('https://jsonplaceholder.typicode.com/users', (obj) => {
  console.log(obj);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
柯正谊
2023-03-14

您可以使用ajaxSetup“全局覆盖所有AJAX请求的默认文本到json转换器,只需最少的努力。”

$.ajaxSetup({
  converters: {
    // default was jQuery.parseJSON
    'text json': data => JSON.parse(data, numberReviver)
  }
})


$.getJSON('https://jsonplaceholder.typicode.com/users')
  .then(users => users.map(user => ({email: user.email, geo: user.address.geo})))
  .then(console.log)
  
function numberReviver(name, value) {
  if(typeof value === 'string' && /^[+-]?[0-9]+(?:\.[0-9]+)$/.test(value)) {
    console.log(`Using custom reviver for ${name}:${value}`)
    value = Number(value)
  }
  
  return value
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
 类似资料:
  • 问题内容: 是否有可能使用jQuery 取消/中止尚未收到响应的Ajax请求? 问题答案: 大多数jQuery Ajax方法都返回XMLHttpRequest(或等效的)对象,因此您可以使用abort()。 请参阅文档: 中止方法 (MSDN)。取消当前的HTTP请求。 abort()(MDN)。如果请求已经发送,则此方法将中止请求。 更新: 从jQuery 1.5开始,返回的对象是名为jqXHR

  • 问题内容: 使用jQuery,如何 取消/中止 尚未收到响应 的Ajax请求 ? 问题答案: 大多数jQuery Ajax方法都返回XMLHttpRequest(或等效的)对象,因此您可以使用。 请参阅文档: abort Method (MSDN).取消当前的HTTP请求。 abort()(MDN)。如果请求已经发送,则此方法将中止请求。 var xhr = $.ajax({ type: “POS

  • 问题内容: 当我使用jQuery进行Ajax请求时,是否可以查看请求的URL? 例如, 如何访问jQuery实际用于发出请求的URL?也许某种方法/属性?我在文档中找不到它。 谢谢。 问题答案: 在成功方法中设置一个断点,然后观察 是请求的真实网址。

  • 如何使用JSON. parse恢复方法编辑某个值。我只想编辑每个声明为姓氏的键并返回新值。

  • 问题内容: 这可能是一个简单的答案,但是我正在使用jQuery的$ .ajax调用PHP脚本。我要做的基本上是将PHP脚本放入函数中,然后从javascript调用PHP函数。 对此 我如何在javascript中调用该函数?现在,我只使用$ .ajax和列出的PHP文件。 问题答案: 使用调用服务器上下文(或URL,或其他)来调用特定的“动作”。您想要的是这样的: 在服务器端,应读取POST参数

  • 问题内容: 首先,最感谢您解决我的问题,以及您可能提供的任何帮助! 好的,就像标题所说的,我需要从索引页面调用php函数,该函数使用JQuery Ajax在数据库中添加新记录作为投票。此函数将返回一个整数,然后将其打印在调用它的表单按钮内。 有人对我将如何实现这一目标有想法吗?任何指导表示赞赏! 我猜是表单动作属性发布了吗? 问题答案: 是的,创建一个单独的PHP文件,该文件调用该函数并回显输出。