【问题标题】:jQuery AJAX and JSON formatjQuery AJAX 和 JSON 格式
【发布时间】:2013-07-02 12:54:50
【问题描述】:

我有一个希望接收 JSON 的网络服务,如下所示:

{"first_name":"test","last_name":"teste","email":"moi@someplace.com","mobile":"+44 22 2222 2222", "password":"testing"}

我在 jQuery 中的 AJAX 调用:

$.ajax({
        type: "POST",
        url: hb_base_url + "consumer",
        contentType: "application/json",
        dataType: "json",
        data: {
            first_name: $("#namec").val(),
            last_name: $("#surnamec").val(),
            email: $("#emailc").val(),
            mobile: $("#numberc").val(),
            password: $("#passwordc").val()
        },
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
    });

有什么方法可以检查我的数据发送的格式吗?我应该没有将正确的 JSON 发送到服务器(这是验证的第一步)。

我的 jQuery 代码是否发送了有效的 JSON,或者我错过了什么?

【问题讨论】:

  • 在发送到 URL 之前复制您的 JSON 并将其粘贴到 jsonlint.com
  • 调用方法时是否遇到断点?
  • 如果将 json 放入变量中并使用 console.log() 会得到什么?
  • 您可以尝试将 ajax 调用设置为您自己创建的文件,以查看您发送的数据是否正确。
  • 使用 Fiddler,它将帮助您记录在您的计算机和 Internet 之间传递的所有 HTTP 和 HTTPS 流量。 fiddler2.com/features

标签: jquery ajax json


【解决方案1】:

您实际上并没有发送 JSON。您将对象作为data 传递,但您需要对对象进行字符串化并改为传递字符串。

您的dataType: "json" 只是告诉 jQuery 您希望它解析返回的 JSON,并不意味着 jQuery 会自动对您的请求数据进行字符串化。

改为:

$.ajax({
        type: "POST",
        url: hb_base_url + "consumer",
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify({
            first_name: $("#namec").val(),
            last_name: $("#surnamec").val(),
            email: $("#emailc").val(),
            mobile: $("#numberc").val(),
            password: $("#passwordc").val()
        }),
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
});

【讨论】:

  • 那么这里的标识符是什么?
  • 没有标识符,内容类型是application/json,所以HTTP请求体应该是原始的JSON,没有标识符。
  • 我对 Angular 和其他框架太习惯了以至于忘记了,我需要先对 JSON 数据进行字符串化。框架把我宠坏了。 jQuery 让你脚踏实地。
【解决方案2】:

这种方法我从来没有运气。我总是这样做(希望这会有所帮助):

var obj = {};

obj.first_name = $("#namec").val();
obj.last_name = $("#surnamec").val();
obj.email = $("#emailc").val();
obj.mobile = $("#numberc").val();
obj.password = $("#passwordc").val();

然后在你的 ajax 中:

$.ajax({
        type: "POST",
        url: hb_base_url + "consumer",
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify(obj),
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
    });

【讨论】:

    【解决方案3】:

    目前您将数据作为典型的 POST 值发送,如下所示:

    first_name=somename&last_name=somesurname
    

    如果你想以 json 格式发送数据,你需要创建一个包含数据的对象并对其进行字符串化。

    data: JSON.stringify(someobject)
    

    【讨论】:

      【解决方案4】:
      $.ajax({
         type: "POST",
         url: hb_base_url + "consumer",
         contentType: "application/json",
         dataType: "json",
         data: {
             data__value = JSON.stringify(
             {
                 first_name: $("#namec").val(),
                 last_name: $("#surnamec").val(),
                 email: $("#emailc").val(),
                 mobile: $("#numberc").val(),
                 password: $("#passwordc").val()
             })
         },
         success: function(response) {
             console.log(response);
         },
         error: function(response) {
             console.log(response);
         }
      });
      

      (俄罗斯) На сервере ваши данные можно получить как - $_POST['data__value']; Например для получения значения first_name на сервере, нужно написать:

      (EN) 在服务器上,您可以将数据获取为 - $_POST ['data__value']; 例如,要获取服务器上的 first_name 值,请编写:

      $test = json_decode( $_POST['data__value'] );
      echo $test->first_name;
      

      【讨论】:

        【解决方案5】:

        您需要解析字符串。您正在从 JavaScript 对象发送到 JSON 对象

        var json = $.parseJSON(data);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-09
          • 1970-01-01
          • 2012-10-03
          • 1970-01-01
          • 2011-06-30
          相关资源
          最近更新 更多