这个简单的jquery / json函数我错过了什么?

时间:2011-08-27 03:17:53

标签: jquery json

我对一个文件有一个简单的ajax查询,它基本上以JSON错误或成功返回。

即:

{"error":"1"}{"error_msg":" Invalid Expiry Date. Your credit card has not been billed for this transaction."}

然而问题是,即使我从我的ajax帖子中获取此json数据,我似乎根本无法访问数据。

我的jquery看起来像这样:

     $.ajax({
          type: 'POST',
          url: 'process_sale.php',
          data: $(this).serialize(), 
          cache: false,
          dataType: 'json',
          success: function(data) {

            if(data['success']=='1'){

                alert('hi');

                $('#feedback').html('<strong>Congratulations</strong');

            }

            if(data['error']=='1') {

                alert('hi');

                $('#feedback').html(data['error_msg']);


            }

                   // this following alert does nothing, because its empty even if the json 
                   // returns what I pasted above example result.

                   alert(data['error'] + ' ' + data['success']);

          }
        });

所有警报都不会执行任何操作。

我错过了一些非常明显的东西吗?我似乎无法理解为什么这不起作用,因为它似乎与我工作的其他代码完全相同。

2 个答案:

答案 0 :(得分:4)

您正在尝试解析无效的JSON - 您的示例中有两个相邻的JSON对象。您需要将它们放在数组中,或者如果您希望JS理解它们,则将它们作为一个对象:

// You want this:
{"error":"1", // note , not {}
 "error_msg":" Invalid Expiry Date. "+
              "Your credit card has not been billed for this transaction."}

// or this (notice the `,` and the `[`, and `]`)
[{"error":"1"},{"error_msg":" Invalid Expiry Date. Your credit card has not been billed for this transaction."}]

根据您的其余代码,我会打赌第一个会更好地满足您的需求。您可能更愿意访问错误消息数据['错误']而不是数据[0] ['错误']

答案 1 :(得分:1)

json数据应该是这样的:

{"error":"1","message":"This is an error message"}

Ajax电话:

$.ajax({
          type: 'POST',
          url: 'process_sale.php',
          data: $(this).serialize(), 
          cache: false,
          dataType: 'json',
          success: function(data) {
            if (data != null){
            if(data.error=='0'){

                alert('Success');

                $('#feedback').html('<strong>Congratulations</strong');

            }

            if(data.error=='1') {

                alert('Error occurred');

                $('#feedback').html(data.mesage);


            }
           }else{
                //do something with NULL
           } 

          }
        });