2017-09-25 42 views
-2

我想提出一个Ajax调用并得到这样的响应:转换API响应

console.log(data); 
{"valid":true,"when":"Today"} 

当我尝试读它,

var res = data.valid; 
console.log(res); 

它显示未定义。我想补充一个条件:

if (res==true){ 
    /*code*/ 
} 

实际代码:

$.ajax({ 
     "async": true, 
     "crossDomain": true, 
     "url": url, 
     "method": "POST", 
     "processData": false, 
     "contentType": false, 
     "mimeType": "multipart/form-data", 
     "data": form, 
     success: function(data){ 
      console.log(data); // {"valid":true,"when":"Today"} 
      var res = data.valid; 
      console.log(res); // Undefined 
      if (res==true){ 
       $("p").addClass("test"); 
       $("#callForm").hide(); 
       $("#buttonClick").hide(); 
       $("#success").show(); 
      } 
     } 
    }) 
}); 
+0

你应该显示实际的代码.... – epascarello

+0

@epascarello:现在检查 – raulxbox

+2

看起来你的服务器没有返回JSON内容类型标题。 – epascarello

回答

0

这里变量data可能是一个字符串,因此使用JSON.parse();,使其工作,它解析到json

var data='{"valid":true,"when":"Today"}'; 
 
var myJSON = JSON.parse(data); 
 
console.log(myJSON); 
 
//Here Data is a string so parse it to json using JSON.parse(); 
 
console.log(myJSON.valid);

完整的代码看起来如下。

$.ajax({ 
    "async": true, 
    "crossDomain": true, 
    "url": url, 
    "method": "POST", 
    "processData": false, 
    "contentType": false, 
    "mimeType": "multipart/form-data", 
    "data": form, 
    success: function(Data){ 
console.log(Data); //{"valid":true,"when":"Today"} 
    var data=JSON.parse(Data);//convert into json 
    var res = data.valid; 
    console.log(res); //undefiend 
    if(res==true){ 
     $("p").addClass("test"); 
     $("#callForm").hide(); 
     $("#buttonClick").hide(); 
     $("#success").show(); 
     } 
     } 
}) 
}); 

试试这个。现在它会起作用。

+0

请原谅我的投票吗? –

+1

更安全的替代方法是指定一个dataType,这样如果服务器有一天决定返回正确的内容类型,代码将不会停止工作。另外...你的评论是错误的。 '//转换成json'这已经是json了,这就是问题所在。 –