【问题标题】:passing php array to javascript variable, then to server将 php 数组传递给 javascript 变量,然后传递给服务器
【发布时间】:2014-05-14 11:19:45
【问题描述】:

我意识到这个问题已经在这里被问过很多次了,但我就是想不通。我敢肯定这很简单,但我一直在敲我的头。我的搜索结果是 php 数组,显示在 jquery 窗口中。我最终需要将它们返回到服务器,但首先需要将它们传递给 jquery 变量。这就是我卡住的地方。

你会看到我已经尝试通过 $book_title,试图将它传递给一个 jquery 变量“title”

<script>
      $(function() { 
      $( "#dialog" ).dialog({
        height: 550, width: 450});
        $( ".btn" ).click(function(){
        //assign values to each variable
        //var title = $("#returnvalues").val();
        var title = <?php echo json_encode($book_title);?>;
        var author = $("#returnvalues").val();
        var published = $("#returnvalues").val();
        var description = $("#returnvalues").val();
        var pages = $("#returnvalues").val();
        var publisher = $("#returnvalues").val();
        var ISBN = $("#returnvalues").val();
       //book_title = $item['volumeInfo']['title'];
       $.ajax({
         type: "POST",
         url: 'book-meta.php',
         dataType: 'json',
         //assign values to the variables to be passed to the server via data
         data: { title : title, author : author, published : published, 
         description : description, pages : pages, publisher : publisher, ISBN : ISBN},
         success: function(data)
             {
             //alert(data);
             //identify the variables for unique handing on the server side
             $("input[name='bbp_topic_title']").val(data.title);
             $("input[name='bbp_extra_field1']").val(data.author);
             $("input[name='bbp_extra_field2']").val(data.published);
             $("input[name='bbp_extra_field3']").val(data.description);
             $("input[name='bbp_extra_field4']").val(data.pages);
             $("input[name='bbp_extra_field5']").val(data.publisher);
             $("input[name='bbp_extra_field6']").val(data.ISBN);
             //$("#displayResults").html(data);
             },
             error: function(errorThrown){
             alert('error');
             }
             });
      $( "#dialog" ).dialog( "close" );  
      });
      });
      </script>  
            <strong><p style="font-size: 16px; text-align: center";>Top 10 Results for &quot;<?php echo @$_POST['q']; ?>&quot;</p></strong> 
        <strong><p style="font-size: 14px; text-align: center";>choose a book to select as your topic</p></strong>&nbsp;
        <table style="width:400px">
        <col width="325">
        <col width="75">
            <?php $i=0; foreach ($data['items'] as $item) { $i++; ?>     
                  <tr>
            <td>
                       <strong><u><div style="font-size: 14px";><?php printf($item['volumeInfo']['title'])?></u></div></strong>
                         <strong>Author: </strong><?php printf( $item['volumeInfo']['authors'][0])?><br />
                         <strong>Published: </strong><?php printf( $item['volumeInfo']['publishedDate']); ?><br />                       
               <strong>Page(s): </strong><?php printf( $item['volumeInfo']['pageCount']); ?><br />
                         <strong>Publisher: </strong><?php printf( $item['volumeInfo']['publisher']); ?><br />
                         <strong>Category: </strong><?php printf( strtolower($item['volumeInfo']['printType']).', '.strtolower($item['volumeInfo']['categories'][0])); ?>&nbsp;&nbsp;
               <strong>ISBN: </strong><?php printf( $item['volumeInfo']['industryIdentifiers'][0]['identifier']); ?></td>
            <td><p><input type="submit" method="post" name="selectbook" value="Select" class="btn" id="returnvalues" /></p>
            <img src="<?php printf( rawurldecode($item['volumeInfo']['imageLinks']['smallThumbnail'])); ?>" />
                    </td>
            <tr><td style="width:420px"><p><strong>Description: </strong><?php printf( $item['volumeInfo']['description']); ?><br /></p></td>
            <?php $book_title=$item['volumeInfo']['title'];
            //$book_meta=array($item['volumeInfo']['title']=>"$book_title",$item['volumeInfo']['authors'][0]=>"$book_author");
            //print(json_encode($book_meta));

感谢任何帮助。如果这被标记为重复问题,也请给这个新手一些具体的方向。谢谢。

【问题讨论】:

  • $book_title 是否包含数组或字符串(任何名称)或名称数组?

标签: javascript php jquery variables


【解决方案1】:

我想通了!感谢 XQDev 和 Uttara 的帮助!我必须在显示我的 php 结果的循环中创建一个单独的脚本。在这个单独的脚本中,我只声明了我的 javascript 变量。

<script>
var title = <?php echo json_encode($book_title); ?>;
</script> 

问题已解决!希望这个帖子能帮助将来遇到类似问题的人。

【讨论】:

    【解决方案2】:

    var title = "&lt;?php echo $book_title; ?&gt;" 可能会导致您想要的结果。

    可以在赋值后使用alert(title)检查结果。

    顺便说一句,您的变量不是“jQuery 变量”。它们是普通的 Javascript 变量。但是您可以使用 jQuery 方法传递和访问它们。

    但是:如果 $book_title 包含一个字符串,你的方式也应该没问题。到底是什么不工作?

    【讨论】:

    • 谢谢。这还没有完成这项工作,但也许你和@Uttara 让我接近了。我确实按照您的建议更改了标题。我也在使用alert(title)。根据您的建议,我看到一个空白返回,根据 @Uttara 的建议,我得到一个“空”响应。
    【解决方案3】:

    如果您尝试将 php 数组分配给 javascript 变量,请执行此操作

    var title = <?php echo json_encode($book_title); ?>;
    

    考虑到您的 $book_title 是一个数组

    Eg: <?php 
       $book_title = array('one', 'two');
    ?>
    
    javascript: title = ['one', 'two']
    

    【讨论】:

    • 到目前为止,您的建议不起作用。我想知道它是否与这行代码有关:$("input[name='bbp_topic_title']").val(data.title); 这就是我将变量传递给服务器的方式。也许这需要改变?另一方面,我正在使用alert(title),我得到一个“空”响应。
    • 今晚经过一些调试,我了解到我的问题是这样的:变量$book_title=$item['volumeInfo']['title']; 没有访问javascript 变量var title = "&lt;?php echo json_encode($book_title); ?&gt;"; 我知道$book_title 有一个值。所以我认为问题是我无法从服务器端获取$book_title 到客户端。有什么建议吗?
    • 只要您可以在文档的任何位置回显 $book_title,您就可以将其作为值传递给 Javascript 变量。在文档传递给客户端之前,您的 var title = "";变成一个简单的 var title = "yourtitle";如果您打开 HTML 源代码,您应该会看到。
    • @XQDev,感谢您一直以来的帮助。我检查了 HTML 源代码,它显示: var title = "Null";我一直在详尽地搜索,很多人说完全按照 Uttara 的建议去做。所以我很茫然
    • 当我设置 $book_title = "Test"; 并将其放在脚本上方时,一切都像宣传的那样工作。但是,将$book_title = $item['volumeInfo']['title']; 放在脚本上方仍然会向title 返回一个空值。如果我将$book_title = "Test"; 放在表格下方($book_title 位于我上面的代码中),那么 null 是title 的结果。我什至将 $book_title 设为全局变量。有人有想法么?这令人沮丧。
    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多