使用特殊字符时,jQuery AJAX调用出现未定义错误

4

我尝试使用jQuery进行AJAX调用,数据中有特殊字符,例如{'data':'<p>test</p>'}。似乎一开始就无法传递此数据。如果只传递{'data':'test'},它将起作用。由于特殊字符<>/,encodeURIComponent和JSON.stringify在此处失败。

请问有谁可以帮忙解决吗?谢谢。

$.ajax({
    type: "POST",
    url: "services.aspx",
    data: "data=" + encodeURIComponent(JSON.stringify(obj)),
    dataType: "text",
    error: function(xhr, textStatus, errorThrown)   {   
        alert("ERROR"); },
    success: function(data)
            {   

            }               
}); 

敬礼,

大卫

4个回答

3

我在Firebug中进行了快速测试,实际上它完全正常工作,数据已发送,所以看起来你的问题与ajax调用本身无关,而是与你正在发布的函数有关。


1
这种问题有时很棘手,因为许多组件都会触及您的数据,并且每个组件都需要其自己的引用或转义样式,以确保您的数据按照您的意图进行传递。
首先要做的是确保数据正确地传递到 ajax 函数。在 ajax 函数之前,使用 console.logalert() 查看数据的样子。根据数据来自何处,此时可能甚至不正确。
您可以使用 Firebug 的 Net 面板查看实际发送到服务器的请求以查看离开浏览器的数据。如果您可以访问服务器,则可以在那里的 ajax 函数处理程序中调试以查看其接收到的数据。
基本上,您必须从数据开始的位置一直走到数据出错的位置,并找到它错误转向的点。

-1

假设在encodeURIComponent(JSON.stringify(obj))中的obj是一个字符串或JSON对象,那么您的脚本应该可以工作。

如果obj = {'data':'<p>test</p>'};,那么您不需要使用encodeURIComponent,您只需执行data: JSON.stringify(obj)

代码还有更多内容吗?如果您能发布它,可能会更有帮助。


1
如果您将“data”设置为字符串,则需要将其格式化为查询字符串。可以使用“data:obj”,但不要使用“data:JSON.stringify(obj)”。 - Quentin
谢谢你指出这个问题,David。看来我的思路有些不对。 - Nalum

-2

我不是ASP开发人员,但在处理通过jQuery Ajax提交的HTML表单时遇到了相同的问题。我以前是这样提交的:

var data = 'id='+ escape(currid) +'&html='+ escape(div_html);

$.post("http://...", data, ...);

希望这可以更好地帮助你。

你应该使用 encodeURIComponent 而不是 escape — 就像原始问题已经做的那样。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接