2014-01-20 29 views
-1

我做了一个ajax POST请求,将JSON数据发布到服务器,并且我得到一个简单的文本响应。我可以看到一切正常,因为它显示在浏览器的调试器中。但是,我无法使用它。如何使用Ajax Post的响应

callajax1(Callback); 


    function callajax1(callbackfn) { 
    $.ajax({ 
     type: "POST", 
     url: myUrl, 
     data: JSON.stringify({ Data: data }), 
     contentType: "text/plain; charset=utf-8", 
     dataType: "json", 
     success: function (data2) { 
      callbackfn(data2); 
     }, 
     failure: function (errMsg) { 

     } 
    }); 
    return false; 
} 


function Callback(data) { 
    alert(data); 
} 

未显示警报。

+0

你怎么骂 “callajax1”? – Tschitsch

+0

'callajax1(回调);' – enb081

+1

一些控制台错误? $ .Ajax()中使用'error'而不是'failure' ...在控制台中查看代码响应。 – Frogmouth

回答

5

你说你得到一个“简单的文本响应”,但你的JavaScript(dataType: "json")表示忽略响应的内容类型并将其解析为JSON。

也许(因为您发送JSON并声明它是纯文本),您很困惑dataType(覆盖服务器返回的内容类型)和contentType(描述您发送的数据)。

如果响应是“简单文本”而不​​是JSON,那么您无法将其解析为JSON。返回JSON或使用dataType: 'text'

+0

+1帮助...... – Frogmouth

+0

感谢您澄清'contentType'和'dataType'之间的区别。这解决了这个问题。 'dataType:'text''工作,while'dataType:'text/plain; charset = utf-8''不。为什么会发生?使用dataType的 – enb081

+0

定义来自服务器的预期响应。由于你的服务器响应是纯文本,我假设你的“成功”回调从未被调用,但失败。请参阅http://api.jquery.com/jquery.ajax/以获取更多信息 – Tschitsch

1
  • 如果阿贾克斯的结果是文字,数据类型应为文本
  • 如果阿贾克斯的结果是HTML,数据类型应该是HTML
  • 如果阿贾克斯的结果是JSON,数据类型应该是JSON
  • 如果结果ajax是xml,数据类型应该是xml

dataType告诉jQuery解析给定数据类型的结果,默认是'text',尽管jQuery足够智能以检测需要哪种转换。

+0

你在说什么“它”? – Quentin

+2

对不起,我按照流程 –

+0

jQuery的默认值是* not * text,它是“智能猜测”,意思是“从响应的MIME类型('Content-Type')推断它。 – Quentin

0

,你可以在这里看到了答案:

http://jsfiddle.net/justtal/x9re9/

function callajax1(callbackfn) { 

    $.ajax({ 
     type: "GET", 
     url: 'https://gdata.youtube.com/feeds/api/videos', 
     /*data: JSON.stringify({ Data: data }),*/ 
     /*contentType: "text/plain; charset=utf-8",*/ 
     /*dataType: "json",*/ 
     success: function (data2) { 
      callbackfn(data2); 
     }, 
     failure: function (errMsg) { 
      callbackfn(errMsg); 
     } 
    }); 
    return false; 
} 


var Callback = function (data) { 
    alert(data); 
} 

callajax1(Callback);