AJAX调用PHP文件不起作用

时间:2014-07-01 14:55:24

标签: php jquery ajax json

我正在练习对localhost进行简单的AJAX调用,但遇到了麻烦。我要做的是将两个文本框表单值发送给PHP,然后通过AJAX成功接收后,它会将消息返回到表单中的空div。我的test.php是这样的:

<?php

$num = htmlentities(substr($_POST["num"], 0, 7), ENT_QUOTES);
$name = htmlentities(substr($_POST["name"], 0, 50), ENT_QUOTES);

$result = "'$num ' + 'and' + ' $name' + ' values have been successfully AJAXd'";

echo json_encode($result);

jQuery的:

  $("#form").submit(function() {
    event.preventDefault();
    $("#msgcontainer").html("");
    $.ajax({
    url: "test.php",
    data: ("#num").serialize(), ("#name").serialize(),
    contentType: "application/json; charset=utf-8",
    type: "POST",   
    dataType: "json"
      success: function(response) {
        $("#msgcontainer").html(response);
      }
    });
  }

当我尝试提交时,页面只是重新加载并向URL添加表单值。我一直试图解决这个问题大约一天,所以任何帮助都会非常感激。

修改

我通过尝试每一个回复来解决问题。不确定为什么它没有序列化...如果有人知道,请解释。使用jQuery代码:

  $("#form").submit(function(event) {
    event.preventDefault();
    $("#msgcontainer").html("");
    $.ajax({
    url: "test.php",
    data: {
            num: $("#num").val(),
            name: $("#name").val()
          },
    type: "POST",
    dataType: "json",
      success: function(response) {
        $("#msgcontainer").html(response);
      }
    });
  });

感谢您的帮助!

5 个答案:

答案 0 :(得分:1)

立即突出两件事:

data: ("#num").serialize(), ("#name").serialize(),
contentType: "application/json; charset=utf-8",

第一个应该是这个(假设你有两个文本框):

data: {
    num: $('#num').val(),
    name: $('#name').val()
},

contentType:行不应该在那里,否则你会有一个空的$_POST

最后,event应该是一个函数参数,即:

$("#form").submit(function(event) {
    event.preventDefault();
    // ...

答案 1 :(得分:1)

您的AJAX调用中的数据参数错误,应该类似于:

data: { num: $('#num').val() , name: $('#name').val() }

答案 2 :(得分:0)

$("#form").submit(function() {
  event.preventDefault();

event未在任何地方定义。我猜你的意思是...submit(function(event) {

您应该在JavaScript控制台中看到错误,告诉您“事件未定义”或“TypeError:无法读取属性'preventDefault'未定义。”

答案 3 :(得分:0)

数据未正确发送。考虑更换:

data: ("#num").serialize(), ("#name").serialize(),

使用:

data: $(this).serialize(),

然后您可能想要修改PHP脚本,以便concatenate字符串而不是summing

同时传递event参数或只使用以下内容:

$("#form").submit(function() {
    var event = arguments[0];
    event.preventDefault();
    ....
});

我怀疑你需要contentType: "application/json; charset=utf-8",

答案 4 :(得分:0)

早上好,

您必须序列化整个表单,例如:

$("#yourform").serialize();

而不仅仅是逐个字段:

("#num").serialize(), ("#name").serialize()