从javascript发送复杂的数据集到没有ajax的PHP

时间:2010-02-16 17:10:52

标签: php javascript scope

javascript如何在不使用AJAX的情况下传递数据,例如从HTML表传递数据?

我缺乏对如何实际提取数据,格式化(可能进入json)以及传递数据的理解。

我正在尝试将数据传递给php函数,该函数将文件发送给用户下载。 (根据我的理解,ajax无法处理的事情)

编辑 - 请举例说明发布一些相当复杂的数据。

EDIT2 - 一个例子......

我通过ajax响应对象填充表。获取这些数据的好方法我将格式化为可以通过表单发送到php文件的表单?

function getSalesByDeviceComplete(responseObj)
{
  var cashTotal = parseInt(responseObj.data[0].cash_total).toFixed(2);
  var creditTotal = parseInt(responseObj.data[0].credit_total).toFixed(2);
  var grandTotal = (parseInt(responseObj.data[0].cash_total) + parseInt(responseObj.data[0].credit_total)).toFixed(2);
  htmlStr += '<ul>';
    htmlStr += '    <li>';
    htmlStr += '        <table class="ui-widget ui-widget-content contentTable">';
    htmlStr += '            <thead>';
    htmlStr += '                <tr class="ui-helper-reset ui-widget-header">'; 
    htmlStr += '                    <th class="contentTableKey">Payment Device</th>';
    htmlStr += '                    <th class="contentTableValue">Sales</th>';
    htmlStr += '                </tr>';
    htmlStr += '            </thead>';
    htmlStr += '            <tbody>';

        htmlStr += '            <tr>';  
        htmlStr += '                <td class="contentTableKey">Credit Card</td>';
        htmlStr += '                <td class="contentTableValue">$'+creditTotal+'</td>';
        htmlStr += '            </tr>'; 
        htmlStr += '            <tr>';  
        htmlStr += '                <td class="contentTableKey">Cash</td>';
        htmlStr += '                <td class="contentTableValue">$'+cashTotal+'</td>';
        htmlStr += '            </tr>';

    htmlStr += '            </tbody>';
    htmlStr += '            <tfoot>';
    htmlStr += '                <tr>';
    htmlStr += '                    <td></td>';
    htmlStr += '                    <td id="salesTotal" class="contentTableValue">$'+grandTotal+'</td>';
    htmlStr += '                </tr>';
    htmlStr += '            </tfoot>';
    htmlStr += '        </table>';
    htmlStr += '    </li>';
    htmlStr += '</ul>';

    $("#contentData").html(htmlStr);
}

响应对象看起来像......

<response_GetSalesByDevice> 
  <data> 
    <cash_total>0.00</cash_total> 
    <credit_total>0.00</credit_total> 
  </data> 
  <success>1</success> 
</response_GetSalesByDevice>

唉,有几个响应对象 比这更复杂。

7 个答案:

答案 0 :(得分:4)

通过浏览器将表单数据发布到PHP脚本,而不是使用异步HTTP请求。

答案 1 :(得分:3)

它“使用”的方式(当然还是非常新的):

http://www.w3schools.com/html/html_forms.asp

答案 2 :(得分:1)

如果“没有AJAX”是指不使用XMLHttpRequest,那么最常见的方法是填写表单中的隐藏字段。

Javascript可以更改隐藏字段,然后当用户像往常一样提交表单时,隐藏值也会被传递。

这可以用于收集屏幕大小等统计信息,这些信息非关键,可以在启用Javascript时传递,如果没有,则可以传递。

答案 3 :(得分:0)

你似乎对AJAX和JSON是/做什么有了一些交叉的理解,或者我很可能不明白你的问题是什么意思。 如果您不想使用ajax,则必须使用正常提交,就像我建议的两个人一样。

但是,如果您要发送相对少量的数据,则可以使用ajax向您的PHP脚本发送GET请求,然后将使用文件进行响应。类似的东西:

http://yourserver.com/test.php?getVariable=29472938472

Test.php脚本查看get变量并返回关联的文件。 完全可以使用AJAX。

如果我走错了路,请告诉我。

答案 4 :(得分:0)

您可以通过常规方式通过表单发帖 但是,表单的目标是隐藏的iframe。这样,您可以保留当前页面,并以通常的浏览器方式处理服务器返回的文件。

答案 5 :(得分:0)

不应直接调用数据,而应调用包含以下内容的php文件:

/myphpfilethatgetsstuff.php     http://mydatadomain.com/?q=getmesomexmlplease“;     $ json = file_get_contents($ jsonurl,0,null,null);     $ json_output = json_decode($ json);

echo "<pre>";
print_r($json_output);
echo "</pre>";
?>

然后迭代创建文件和html输出的数据。

在主文件中使用此javascript:

$('div#results').load("http://mydomain.com/myphpfilethatgetsstuff.php");

将div放在某个地方:

<div id="results"></div>

和这个链接:

<a href="http://mydomain.com/mynewfilewithsessionid.xml">Your File</a>

答案 6 :(得分:0)

XMLHttpRequest对象的一种替代方法是通过页面中嵌入的iFrame进行异步调用。当无法使用xmlhttprequests时,这是一个记录在案的“AJAX”设计模式。 有一些jquery组件(即AJAX上传)使用这种方法。

此处的文档和示例:

http://ajaxpatterns.org/IFrame_Call