javascript - 将 Ajax 请求从 Javascript 转换为 jQuery

标签 javascript jquery sql ajax xml

我是第一次使用 Ajax,我正在尝试将 ajax 请求从 javascript 转换为 jquery,但不知道该怎么做。 这是我的 JavaScript 代码:

function aaa(track_id) {
	var req = new XMLHttpRequest();
	req.open("get", "list.php?tr=" + track_id, true);
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	req.onreadystatechange = bbb;
	req.send();
}
    
function bbb(e)	{
  if(e.target.readyState == 4 && e.target.status == 200) {
    antwort = e.target.responseXML;
    document.getElementById("title").firstChild.nodeValue = antwort.getElementsByTagName("ti")[0].firstChild.nodeValue;
    document.getElementById("artist").firstChild.nodeValue = antwort.getElementsByTagName("art")[0].firstChild.nodeValue;
  }
};

这是 list.php:

<?php
   header("Content-Type: text/xml; charset=utf-8");

   $con = mysqli_connect("", "root", "", "music");
   $res = mysqli_query($con, "SELECT * FROM tracks WHERE track_id = " . $_GET["tr"]);
   $dset = mysqli_fetch_assoc($res);

   echo "<?xml version='1.0' encoding='utf-8'?>";
   echo "<data>";
   echo " <tr>" . $dset["track_id"] . "</tr>";
   echo " <ti>" . $dset["title"] . "</ti>";
   echo " <art>" . $dset["artist"] . "</art>";
   echo "</data>";
?>

有人可以帮助我吗?提前致谢!

最佳答案

虽然其他答案可以“完成工作”,但您可以进行一些改进。

jQuery 有一个特定的 get方法简化了事情,此外,您可以将数据放入传递给 getajax 调用的对象中,而不是像其他答案中那样将其附加到 url 中:

function aaa(track_id) {
  $.get( 'list.php',
    { tr: track_id },
    function(data) {
      var $antwort = $(data.responseXML);
      $("#title").text($antwort.find("ti").text());
      $("#artist").text($antwort.find("art").text());
    }
    );
}

另一个改进是将其构建为 Promise:

function aaa(track_id) {
  $.get( 'list.php',
    { tr: track_id }
  ).done( function(data) {
      var $antwort = $(data.responseXML);
      $("#title").text($antwort.find("ti").text());
      $("#artist").text($antwort.find("art").text());
  });
}

这样做的优点是您可以相对轻松地将错误处理链接到此。

转向list.php,它有一些问题。

返回 JSON 而不是 XML 可能会更好,因为这会降低 success 代码的复杂性,但显然如果其他应用程序需要 XML API,您就无法执行类似的操作。

<?php

// protect against MySQL injection by using parameters...

$query = '
  SELECT track_id AS tr, title as ti, artist as art
  FROM tracks
  WHERE track_id=?';


$mysqli = new mysqli("", "root", "", "music");

// this needs more error checking...
$stmt = $mysqli->prepare( $query);
$stmt->bind_param( 's', $_GET['tr']);
$stmt->execute();
$result = $stmt->get_result();

$dset = $result->fetch_assoc();

// simpler to return JSON
header('Content-Type: application/json');
echo json_encode( $dset);

?>

关于javascript - 将 Ajax 请求从 Javascript 转换为 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49998214/

相关文章:

javascript - jquery 如何在单击此链接 ic 时仅更改链接类

javascript - 表单上的 AJAX 引用错误

php - 确认弹出窗口并将 php 值传递给 js,输入图像作为提交

javascript - 如何在 javascript 中生成 CMAC-AES

javascript - 使用 PHP 抓取 SQL 数据,然后将数组发送到 Javascript

jquery - jstree 获取所选节点的级别

javascript - iPad Safari 按钮高亮问题

java - Hibernate GUID 本地生成器

sql - 如何从 postgres 中的同一张表中获取分层 json

iphone - 如何查询外部 SQL 数据库 - iPhone 应用程序