Javascript 使用ajax发布不起作用

Javascript 使用ajax发布不起作用,javascript,jquery,ajax,forms,submit,Javascript,Jquery,Ajax,Forms,Submit,我有一个这样的表格: <form> <input type="submit" value="X" id="deleteButton" onclick="ConfirmChoice(<?php echo $id; ?>)" /> </form> 从 input type=“submit”to input type="button" 另外,因为您没有设置它,所以对服务器的请求是json格式的,在您的情况下,json格式不正确 试着这

我有一个这样的表格:

 <form>
     <input type="submit" value="X" id="deleteButton" onclick="ConfirmChoice(<?php echo $id; ?>)" />
 </form>

input type=“submit”
to

input type="button"

另外,因为您没有设置它,所以对服务器的请求是json格式的,在您的情况下,json格式不正确

试着这样做:

 var dataString = "{'id'= '"+ theid + "'}";

这应该可以让它工作:)

如果不知道问题的确切位置,很难回答这个问题。deleteSong.php工作正常吗

正如其他人所说,您应该将输入类型更改为
按钮
或从函数中返回false,否则浏览器将尝试以正常方式提交表单,但由于您没有在
标记中指定
操作
,因此无法正常工作

就我个人而言,我会采取完全不同的做法:

HTML:

 <input type="button" value="<?php echo $id ?>" id="deleteButton">
 $(document).ready(function () {
     $('#deleteButton').click(function () {
         var answer = confirm("Are you sure you want to delete this song?");
         if (!answer) {
             return false;
         }
         var data = 'id=' + $(this).val();
         $.ajax({
             type: 'POST',
             url: 'deleteSong.php',
             data: dataString,
             success: function (response) {
                 // response will contain the output from your php script.
                 // Do something with it here. If you just want to see what it
                 // says, do something like:
                 console.log(response);
                 // then look in the console (view > javascript console in chrome)
             }
         });
     });
});
我只是想解释一下我在这里做什么(如果我告诉你你已经知道的事情,很抱歉,我想对将来可能阅读本文的任何人尽可能明确:)

  • 我把整个东西都放在
    $(document).ready(function(){…})中
    因此它只在页面加载完成时运行,否则您可能会尝试将函数绑定到一个按钮上的click操作,而这个按钮还不存在
  • 如果(answer!=0)
    是多余的,您可以只写
    如果(!answer)
    ,因为任何正整数的计算结果都是
    true
  • 我在上面包含了一个
    success
    回调,它可能会帮助您进行调试
整个页面上是否只有一个“删除”按钮?还是在每首歌旁边都会有一个删除按钮?如果是后者,则必须为每个按钮指定不同的ID,而不仅仅是
deleteButton
,因为所有ID都必须是唯一的


如果上述操作不起作用,您确定jQuery已正确加载吗?要进行检查,请在控制台中键入
jQuery
,如果没有收到错误,则可以。另一种可能是,您的
deleteSong.php
脚本有问题,但我无法在没有看到它的情况下帮助您解决问题。

添加一个返回值false;函数中的语句,因此更改此选项是有效的。谢谢因为它是用ajax发送的,所以在更新完changefs之后,我如何才能让页面刷新?location.reload();确实刷新了页面,但我想,使用ajax的全部意义在于您不想刷新页面!是的,如果答案解决了你的问题,你应该把它标记为正确答案!(这将有助于将来阅读此问题的人,这将有助于给出答案的人,这将有助于您,因为您正在标记正确答案,更多的人将愿意回答您的问题)谢谢您的帮助。你想解释什么就解释什么,因为我对这一切都比较陌生。是的,每首歌旁边都有一个删除。所以我决定只将id传递给函数。由于它现在可以工作,我对它非常满意,但我想了解更多关于document.ready函数的信息。当我提到它不起作用时,所以我正在考虑将其省略,但是,我觉得避免您描述的问题是非常必要的。我应该继续让我的代码使用它吗?如果我是动态的,我如何使ID唯一,但仍然能够获得函数中的所有内容?看起来你并不真的需要使用ID,相反,你可以将歌曲的ID存储在
值中,就像我上面所做的那样,然后在jQuery中使用
.val()
获得它。然后,您可以给所有按钮一个类
deleteButton
,并用
$('.deleteButton')将函数绑定到它们。单击(function(){…})
。不确定为什么
$(document)。ready()
不起作用-您是否将它包含在另一个可能会干扰它的函数中?另外请注意,
文档
周围不应该有
s,即不要编写
$('document').ready()
。(另外,我的另一个评论需要注意的是,如果您有大量的delete按钮,那么将click函数绑定到一个在
上带有
,例如
$(body).on('click','.deleteButton',function(){…})
的祖先元素可能更明智,尽管我上面写的仍然有效。
 $(document).ready(function () {
     $('#deleteButton').click(function () {
         var answer = confirm("Are you sure you want to delete this song?");
         if (!answer) {
             return false;
         }
         var data = 'id=' + $(this).val();
         $.ajax({
             type: 'POST',
             url: 'deleteSong.php',
             data: dataString,
             success: function (response) {
                 // response will contain the output from your php script.
                 // Do something with it here. If you just want to see what it
                 // says, do something like:
                 console.log(response);
                 // then look in the console (view > javascript console in chrome)
             }
         });
     });
});