【问题标题】:Passing JSON in URL from Javascript从 Javascript 在 URL 中传递 JSON
【发布时间】:2013-09-25 14:05:23
【问题描述】:

我有一个从textarea 中提取的数据,如下所示:

可能关注的人:
                            兹证明 JOHN SMITH 先生/女士在 2013-2014 学年第一学期就读于该机构
                            作为一名二年级的心理学学生。以下是他/她的对帐单。

我尝试了什么?

var letter = $('#textarea_letter').val();
var myJSON = {"letter": letter }; 
var strJSON = JSON.stringify(myJSON); 

$('#toPDF_button').attr('href', 'generate_pdf/'+ myJSON +'/pdf'); 
// this button then sends the letter to a function w/c generates the PDF

我得到了什么?

Error_404 页面

我需要在参数 url 中传递字母,这就是它在 url 中的样子:

localhost/accounting/generate_pdf/{"letter":"TO WHOM IT MAY CONCERN:\n\t\t\t\t\t\t\tThis is to certify that Mr/Ms JOHN S> SMITH is enrolled in this institution for this First Semester of School Year 2013-2014\n\t\t\t\t\t\t\tas a second year BSIT student. Below is his/her STATEMENT OF ACCOUNT."}/pdf

我怎样才能做到这一点?我是 JSON 新手。谢谢

更新

这样做之后var myJSON = encodeURIComponent(JSON.stringify(myJSON1));
这是新的 URL,但仍然出现相同的错误

http://localhost/accounting/accounting/generate_sta/%7B%22letter%22%3A%22TO%20WHOM%20IT%20MAY%20CONCERN%3A%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Ct%5CtThis%20is%20to%20certify%20that%20Mr%2FMs%20JOHN%20SMITH%20G.%20SEBUCAO%20is%20enrolled%20in%20this%20institution%20for%20this%20First%20Semester%20of%20School%20Year%202013-2014%5Cn%5Ct%5Ct%5Ct%5Ct%5Ct%5Ct%5Ctas%20a%20second%20year%20Psychology%20student.%20Below%20is%20his%2Fher%20STATEMENT%20OF%20ACCOUNT.%22%7D/pdf

【问题讨论】:

  • 您应该提交表单,而不是将其作为 URL 的一部分。
  • 404 错误与 JSON 无关。它与缺少请求的文件有关。由于您将此帖子标记为 Codeigniter,这意味着您没有控制器文件 AccountingController{} 或您的控制器类在那里,但方法 generate_pdf() 丢失。我对你投了反对票,因为你没有提供所有信息并让我猜测。尝试让人们轻松地帮助您。
  • 如果我的问题有点含糊,我很抱歉,但我确定我已经拥有 generate_pdf() 的功能。我有一种预感,它与 URL 编码有关。
  • 它真的与 json 部分有关,我尝试替换一个虚拟参数并且它有效。所以问题确实出在 JSON 部分
  • 在您的网址中我没有看到index.php,所以您是否使用 htaccess 将其删除。如果是,那你为什么有accounting/accounting。我想说的是:你确定这个网址格式正确吗?因为你的 url 的最后一部分被认为是一个不会产生 404 错误的段。

标签: javascript php json codeigniter url


【解决方案1】:

您不能按原样发送 JSON 字符串 - 您必须对其进行编码。

为此有一个 Javascript 函数。

var strJSON = encodeURIComponent(JSON.stringify(myJSON));

这应该可以解决问题。

【讨论】:

  • 试过小提琴但错误,:(当我从参数中删除它时,我知道它真的是 JSON 的东西 bcoz 我的代码工作正常。
  • 你得到什么错误? 404?接收页面是否正确编程为能够采用这种参数? 404 表示某种重写错误。如果您需要传递变量,您可能需要执行 domain.com/url?json=thestring。查看更新的小提琴:jsfiddle.net/EpBjE/1
  • 你更新的小提琴现在没有显示任何 404 错误,它显示一个空白页面。现在如何获取传递的值?
  • 你必须从服务器端这样做
【解决方案2】:

您可以使用 encodeURIComponent() 函数对 URI 组件进行编码。此函数对特殊字符进行编码。此外,它还对以下字符进行编码: , / ? : @ & = + $ # 提示:使用 decodeURIComponent() 函数对编码的 URI 组件进行解码。

var jsonURLS = encodeURIComponent(JSON.stringify(myJSON));

【讨论】:

  • 仍然得到同样的错误,可能是因为 \t\t\t\ts?在网址中?
【解决方案3】:

您不应将其作为 url 参数传递。您应该使用 POST 发送它。所以你的 JS 代码可能如下所示:

$.ajax({
        type: 'POST',
        data: strJSON,
        contentType: 'application/json',
        url: yourMethodUrl
    }

我不知道你的服务器方法是如何编写的,但你也可以在那里更新一些东西,这样它就不会尝试读取 url 并使用请求的值。

【讨论】:

  • 我试过这个,但我不能使用这个方法,因为我只需要传递参数我不需要它来回滚数据。
  • 我不确定你的意思。 POST 正是用于将数据传递给它所调用的任何东西。每当客户端需要向服务器传递任何内容时,都会使用 POST 动词。当您尝试使用 url 参数发送数据时,您实际上使用的是 GET 动词,其目的是检索数据,而不是发送数据。所以你正在做与你应该做的完全相反的事情。至少,如果我正确理解了这个问题。
  • @karol.barkowski,如果我想将搜索数据发送到服务器,但我还希望每个搜索都有一个唯一的 URL,以便用户可以将搜索链接发送给其他人,我该怎么办?跨度>
【解决方案4】:

从 GET 更改为 POST 不是一个无害的选择。除此之外,POST 排除了 HTTP 缓存的使用。 现在,考虑到似乎需要生成自定义文档的初始示例,缓存可能会有所帮助。

【讨论】:

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